账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    react-lazyload首屏加载后,再滑动就不加载了,都是loding,有用过的能指点下吗
    66
    0

    我几乎把案例拿过来了,还是不行,求指点下,各位

    import React from "react";
    import LazyLoad from 'react-lazyload';
    import Lazyloading from '../Lazyloading/index';
    import Placeholder from '../Lazyloading/Placeholder';
    
    class Griddoubt extends React.Component {
        constructor(props) {
            super(props);
            this.state = {
            };
        };
        render() {
            const data = this.props.data;
            //[{once: false, id: "http://39.107.0.png", count: 1},]
            return (
                <div>
                    {data.map((el, index) => {
                        return (
                            <LazyLoad
                                once={el.once}
                                key={index}
                                height={200}
                                offset={[100, 0]}
                                placeholder={<Placeholder />} //loading
                                debounce={500}
                            >
                                <Lazyloading once={el.once} id={el.icon} count={index + 1} />
                            </LazyLoad>
                        );
                    })}
                </div>
            );
        }
    }
    
    export default Griddoubt;
    
    
    import React from "react";
    
    class Lazyloading extends React.Component {
        constructor(props) {
            super(props);
            this.state = {
                isReady: true,
                count: 1,
            };
        };
    
        componentWillReceiveProps(nextProps) {
            if (nextProps.id !== this.props.id && this.props.id) {
                this.setState({
                    isReady: false
                });
    
                setTimeout(() => {
                    this.setState({
                        isReady: true,
                        count: this.state.count + 1
                    });
                }, 500);
            } else {
                this.setState({
                    isReady: true
                });
            }
        }
    
        render() {
            console.log(this.props);//首屏渲染后,再滑动就执行不到这了
            return this.state.isReady ? (
                <div className="" style={{ height: '234PX', width: '50%', float: 'left', background: 'rgb(133, 138, 223)', textAlign: 'center', }}>
                    {this.props.once ? (
                        <div >
                            加载失败
                        </div>
                    ) : (
                            <div >
                                加载成功
                            </div>
                        )}
                </div>
            ) : (
                    <div >
                        loading...
                    </div>
                );
        }
    }
    
    export default Lazyloading;
    
    import React from 'react';
    
    export default function Placeholder() {
        return (
            <div style={{ height: '234PX', width: '50%', float: 'left', background: 'rgb(229, 142, 196)', textAlign: 'center' }}>
                <img src="http://39.107./1.png"
                    style={{ width: '50% ' }}
                />
            </div>
        );
    }
    
    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 11 元积分
        全部回答
    • 0
    • 无期过往ヘ 普通会员 1楼

      React LazyLoad 是一个用于加速网页加载性能的库,它能够动态地加载组件的图片、视频、CSS、JavaScript等资源,当页面滑动时,只有当某个组件的加载完成或达到一定高度时,才会继续加载该组件的其他资源。以下是一些可能导致 LazyLoad 在首屏加载后无法滑动的可能原因和解决方法:

      1. 组件未完全加载
      2. 使用了 lazyLoad 的组件,并且这些组件可能未在页面加载之前完全加载,或者在使用 lazyLoad 的组件时,没有正确地在页面上添加 LazyLoad 的插件,导致其未被应用到页面上。
      3. 检查 lazyLoad 插件的正确安装和配置。在项目根目录下,可以使用以下命令安装 lazyLoad 插件: npm install react-lazyload
      4. 在组件中使用 lazyLoad 插件的 useLazyLoad 函数来管理 lazyLoad。例如: ```jsx import React from 'react'; import { useLazyLoad } from 'react-lazyload';

        const MyComponent = () => { const lazyLoad = useLazyLoad();

        // 使用 lazyLoad 的相关方法,例如 lazyLoad 成功时执行的函数 return (

        Loading...

        ); };

        export default MyComponent; ```

      5. 组件内部代码未执行

      6. 如果组件内部的代码未在页面加载完成后立即执行,可能会导致 LazyLoad 动态加载的资源无法正确加载,导致页面加载完成后仍显示 "Loading..." 的效果。
      7. 检查组件内部的代码,确保在页面加载完成后能够正确执行 LazyLoad 执行的逻辑。例如,如果组件需要处理特定的数据,可以在组件内部通过 useEffect 函数来获取数据并进行处理,而不是在页面加载完成后立即执行。
      8. 如果组件内部的代码需要外部资源(例如,需要从服务器获取数据)在组件内部同步执行,可以使用 useEffect 函数的 useEffectOnce 函数来在页面加载完成后立即执行外部资源的获取和处理。

      9. 页面高度限制

      10. 如果页面的高度限制了 lazyLoad 所加载的组件的高度,可能需要调整页面的高度以适应组件的高度。
      11. 在页面的 style 样式中添加 min-height 属性来限制页面的高度。例如: jsx <div style={{ minHeight: '100vh' }}> <MyComponent /> </div>

      12. 动画效果未应用到整个页面

      13. 如果组件的动画效果没有应用到整个页面,可能会导致 LazyLoad 动态加载的资源在页面滑动时仍然显示 "Loading..." 的效果。
      14. 在组件中使用 useLazyLoaduseEffect 函数的 useEffect 处理器,当页面滚动到组件的某个位置时,可以通过 useEffectuseEffect 函数的 useEffect 处理器来应用动画效果。例如: ```jsx import React from 'react'; import { useLazyLoad } from 'react-lazyload';

        const MyComponent = () => { const lazyLoad = useLazyLoad();

        const [visible, setVisible] = useState(false);

        useEffect(() => { setVisible(!visible); }, [visible]);

        // 使用 lazyLoad 的相关方法,例如 lazyLoad 成功时执行的函数 return (

        Loading...

        {visible &&
        }
        ); };

        export default MyComponent; ```

      以上就是可能导致 React LazyLoad 首屏加载后无法滑动的一些常见原因和解决方案。如果问题仍然存在,可能需要进一步排查和优化,例如检查 lazyLoad 插件的版本、检查页面的高度设置、检查动画效果是否应用到整个页面等。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部