React useState hook, calling setState with function(响应useState挂钩,使用函数调用setState)
本文介绍了响应useState挂钩,使用函数调用setState的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在Reaction(使用挂钩时)中有一个概念让我困惑。
我做了一个组件进行解释(增加了一个计数器):
const [counter, setCounter] = useState(0); // counter hook
// code will follow
// render
return (
<div>
<button onClick={handleClick}>+</button>
<h3>{counter}</h3>
</div>
);
对于处理程序函数,我看到了设置状态的不同选项。
第一种方法(正常使用setState()
):
const handleClick = () => {
setCounter(counter + 1);
};
第二种方法(在setState()
内创建函数并返回新值):
const handleClick = () => {
setCounter((counter) => {
return counter + 1;
});
};
我认为不同之处在于,使用第二种方法,您可以在设置状态后立即进行回调,如下所示:
const handleClick = () => {
setCounter((counter) => {
return counter + 1;
}, () => {
console.log(counter); // trying callback after state is set
});
};
但在尝试这两种方法时,控制台显示以下错误消息:
警告:来自useState()和useReducer()挂钩的状态更新不支持第二个回调参数。若要在呈现后执行副作用,请使用useEffect()在组件主体中声明它。
所以我认为在这两种情况下,使用useEffect()
作为setState()
的回调是正确的方式。
我的问题是:这两种方法有什么不同,设置状态最好的方法是什么。我读过有关状态不变性的内容,但不能立即看出它在本例中会有什么不同。
推荐答案
在您的情况下是相同的。
基本上,当使用以前的状态计算您的状态时,您可以使用第二种方法来获取以前的值。
查看Reaction文档中有关此问题的信息:
Functional updates
这篇关于响应useState挂钩,使用函数调用setState的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:响应useState挂钩,使用函数调用setState


猜你喜欢
- Flexslider 箭头未正确显示 2022-01-01
- 失败的 Canvas 360 jquery 插件 2022-01-01
- 如何使用 JSON 格式的 jQuery AJAX 从 .cfm 页面输出查 2022-01-01
- Quasar 2+Apollo:错误:找不到ID为默认的Apollo客户端。如果您在组件设置之外,请使用ProvideApolloClient() 2022-01-01
- addEventListener 在 IE 11 中不起作用 2022-01-01
- 400或500级别的HTTP响应 2022-01-01
- Fetch API 如何获取响应体? 2022-01-01
- CSS媒体查询(最大高度)不起作用,但为什么? 2022-01-01
- Css:将嵌套元素定位在父元素边界之外一点 2022-09-07
- 使用RSelum从网站(报纸档案)中抓取多个网页 2022-09-06