为了账号安全,请及时绑定邮箱和手机立即绑定

Linter 或用户错误:从使用设置状态影响导致循环

Linter 或用户错误:从使用设置状态影响导致循环

摇曳的蔷薇 2022-09-29 15:50:38
目前,我的组件如下所示:const { listOfStuff = [{name:"john"},{name:"smith"}] } = propsconst [peopleNames, setPeopleNames] = useState([])useEffect(() => {  listOfStuff.forEach(userName => {    setPeopleNames(peopleNames.concat([userName.name]))  })},[listOfStuff, peopleNames])正如您可能看到的,这会导致无限循环,因为正在更新。因为它包含在依赖项数组中。peopleNames现在,我可以将其从依赖项数组中删除。但我的棉绒会对我大喊大叫。以前的经验告诉我,要相信自己的衣裳而不是自己的判断。我觉得我在这里错过了一些基本的东西。理想情况下,我希望状态看起来像这样peopleNames['john','smith']
查看完整描述

1 回答

?
慕神8447489

TA贡献1780条经验 获得超1个赞

setPeopleNames(current => current.concat([userName.name]))

然后,可以从依赖项数组中删除。peopleNames


从 useState ie setState 返回的第二个数组项可以采用函数作为其参数,其中函数的参数是状态的当前值。因此,您可以根据当前状态值进行更改,而无需引用 useState 的第一个参数。


进一步的家庭作业:


您的使用效果代码可以简化为:


useEffect(() =>

    setPeopleNames(current =>

        current.concat(listOfStuff.map(stuff => stuff.name)

    ),

    [listOfStuff]);


查看完整回答
反对 回复 2022-09-29
  • 1 回答
  • 0 关注
  • 78 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号