首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >React Hooks函数更新

React Hooks函数更新
EN

Stack Overflow用户
提问于 2019-12-22 06:53:09
回答 1查看 581关注 0票数 1

React的文档(https://reactjs.org/docs/hooks-reference.html#usestate)有这个例子:

代码语言:javascript
复制
function Counter({initialCount}) {
  const [count, setCount] = useState(initialCount);
  return (
    <>
      Count: {count}
      <button onClick={() => setCount(initialCount)}>Reset</button>
      <button onClick={() => setCount(prevCount => prevCount - 1)}>-</button>
      <button onClick={() => setCount(prevCount => prevCount + 1)}>+</button>
    </>
  );
}

为什么前面的代码比以下代码更好:

代码语言:javascript
复制
function Counter({initialCount}) {
  const [count, setCount] = useState(initialCount);
  return (
    <>
      Count: {count}
      <button onClick={() => setCount(initialCount)}>Reset</button>
      <button onClick={() => setCount(count - 1)}>-</button>
      <button onClick={() => setCount(count + 1)}>+</button>
    </>
  );
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-22 06:57:10

不是的。在你的例子中,另一种方式是完全可以的。然而,还有其他情况,即

(a)如果您具有设置状态的效果:

代码语言:javascript
复制
  useEffect(() => {
     // ... do stuff
     setCount(count + 1);
  }, [count]); // whoops, thats kind of recursion. However if we omit it, count might change in the meantime

(b)如果执行异步操作,并且state局部变量可能不保存当前状态值:

代码语言:javascript
复制
 (async function action() {
     await /*something*/;
     setCount(count + 1); // is count still up to date?
  })();

在这些情况下,使用setState回调是解决问题的一种方法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59440442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档