Hooks从孙子创建的Change祖父母状态上的结果是否混淆?

时间:2019-08-12 09:31:45

标签: javascript reactjs

我正在尝试从孙子代更改grandParent状态,我知道我应该将某种方法传递给孙子组件,尝试之后,结果会感到困惑。

如果我逐步通过方法,例如GrandParent --->父级--->子级,结果将是预期的。

问题来了:为什么会发生这种情况?

https://codesandbox.io/s/cranky-grass-45ifs

我希望一次单击添加的每个项目:

  • 在该项目的后面添加一个红色的“ +”(此UI更改仅作为示例),并且
  • 在控制台中正确记录当前状态,但红色“ +”未显示,因为它不是当前状态,但看起来像上一个状态?。

APPEND

正如@Antonio所说,解决方案可能是:

  • setTodos 中,我可以使用preTodos进行更新。
  • 像我尝试过的一样,只需逐步传递方法,但不作为孙子组件,也可以解决问题。

现在,最重要的是:

控制台为什么会有不同的结果?

1 个答案:

答案 0 :(得分:1)

使用usState挂钩更新处于Array状态的Object元素时出错。

const toggleStarred = text => {
  console.log("toggle: ", todos);
  setTodos((prevTodos) => prevTodos.map((todo) => {
    if (todo.text === text) return {...todo, isStarred: !todo.isStarred}
    return {...todo};
  }));
};

这里是codepen