react 使用京东组件库实现触底加载加载

1。安装组件库 

npm i @nutui/nutui-react

 2.引入触底加载组件

import { Cell, Infiniteloading } from '@nutui/nutui-react';

3.请求数据 来当作触底加载的内容

  let [list, setlist]: any = useState([])
 useEffect(() => {
        const stores: any = store.getState()
        if (stores.user.user.token) {
            getshow(true)
        }
        getTypeOneList({ parent_name: '鞋类' }).then((res: any) => {
            // setlist(res.res)
            let a = res.res
            list.splice(0)
            a.forEach((element: any) => {
                //   setlist((list: any) => [...list, element])
                list.push(element)
            });
            setlist([...list])
        })

    }, [])

4.初始化组件

//滚动加载
    const [defultList, setDefultList] = useState<string[]>([])
    const [hasMore, setHasMore] = useState(true)

    useEffect(() => {
        if (list.length > 0) {

            init();
        }
    }, [list])

    const loadMore = (done: () => void) => {
        // console.log(list)
        if (list.length > 0) {

            setTimeout(() => {
                const curLen = defultList.length
// 每次加载10条 可以根据需求自行修改
                for (let i = curLen; i < curLen + 10; i++) {
                    if (i < list.length) {

                        defultList.push(list[i])
                    }
                }
                if (defultList.length >= list.length - 1) {
                    setHasMore(false)
                } else {
                    setDefultList([...defultList])
                }
                done()
            }, 500)
        }

    }

    const init = () => {


        // console.log(list[0])

        for (let i = 0; i < 10; i++) {
            if (i < list.length) {

                defultList.push(list[i])
            }
            if (defultList.length >= list.length - 1) {
                setHasMore(false)
            } else {
                setDefultList([...defultList])
            }

            // console.log(defultList)
        }
        setDefultList([...defultList])

        // console.log(defultList)
    }

5.渲染页面

 <div className={Style.Shoping}>
                    <p>| 为你优选</p>
                    <ul id="scroll" style={InfiniteUlStyle}>
                        <Infiniteloading
                            containerId="scroll"
                            useWindow={true}
                            useCapture={true}
                            hasMore={hasMore}
                            threshold={200}
                            onLoadMore={loadMore}
                            pullIcon={" "}
                            pullTxt=' '
                            loadIcon={' '}

                        >
                            {defultList.map((item: any, i: any) => {
                                return (
                                    <li key={i} onClick={() => details(item.id)}>
                                        <div>
                                      
                                          
                                                <img src={item.img} alt="Real Image" />
                                       
                                        </div>


                                        <div className={Style.shopli}><p>{item.title}</p></div>
                                        <div className={Style.shopli}>
                                            <div>
                                                <span style={{ color: 'red' }}>¥{item.price} </span>
                                                <span style={{ color: '#b0b0b0', textDecoration: "line-through" }}>¥{item.special_price}</span>
                                            </div>
                                            <span>  <More></More> </span>
                                        </div>
                                    </li>
                                )

                            })}
                        </Infiniteloading>
                    </ul>

                </div>

以上是使用京东组件库触底加载步骤,如果对你有帮组请点赞

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值