模仿老师的debounce做了一个小demo,但最后一个段输入的没有显示

来源:9-8 老瓶新酒 - 使用自定义Hook实现 函数防抖

菜鸟x

2020-07-10

图片描述
https://gitee.com/namerirong/lightship 这是demo的仓库。而且这个组件第一次挂载的时候,这个函数组件执行了两次。然后当debounce更改的时候,useEffect也执行了两次

写回答

2回答

张轩

2020-07-13

同学你好 渲染两遍很是这个问题 https://coding.imooc.com/learn/questiondetail/176598.html 

最新版的 create-react-app 创建的 index.js 根文件有变化。它会多包裹一个 react strictmode。https://zh-hans.reactjs.org/docs/strict-mode.html

附:clone 了你的 repo,跑起来首页是空的,不知道为啥,没详细看代码


0
1
菜鸟x
哦。我忘记改掉了url路径了,我在里面手贱加了个路由。要在路径上加上/test
2020-07-13
共1条回复

菜鸟x

提问者

2020-07-13

如果把useEffect里面的代码修改一下

  if (useDebounceValue && triggerSearch.current) {

      // setListData(list => {

      //   list.push(useDebounceValue)

      //   console.log('useDebounceValue: ', useDebounceValue)

      //   return list

      // })

      // 修改后

      setListData(listData => [...listData, useDebounceValue])

    }

,是能正常使用,但是我发现每输入一次,这个组件连续渲染了四次了,这是因为react本身的原因吗?而且我上面有写法是能正常输出了,但是这个listData就不能随意在哪个位置添加数据。遇到再复杂一点的数据就不能用[...listData, ]这种写法了。例如[{},{}]这种结构,要修改里面某一项对象的某一个属性时

0
0

React18+TS高仿AntD从零到一打造组件库

设计,开发,测试,发布再到 CI/CD,从0到1造轮子

2123 学习 · 959 问题

查看课程