类组件中setState更新状态不同写法定时器结果不同
使用解构
componentDidMount() {
const { n } = this.state
this.timer = setInterval(() => {
this.setState({ n: n + 1 })
}, 1000);
}
不使用解构
componentDidMount() {
this.timer = setInterval(() => {
this.setState({ n: this.state.n + 1 })
}, 1000);
}
为什么两种答案不一样呢,第一个只触发一次,第二个定时器有效,按理来说setState是异步的都不能出发定时器啊,有大佬帮忙解释一下吗
不是解构不解构导致的差异,这是你两个取值时机不一样导致的差异。
第一种应该这样写:
this.timer = setInterval(() => {
const { n } = this.state
this.setState({ n: n + 1 })
}, 1000);
这个问题跟解构、异步都没有关系。相关的知识点是闭包,读取state的时机。
第一段代码只读取一次state.n
, 每次interval执行n+1
都是同一个值。
第二段代码在每次interval执行的时候读取state.n
,在最新值的基础上+1
所以我有这个: 只是一个数组的数字例如然而没有给出正确的总数,但?我甚至放了一个超时延迟,看看这是否解决了问题。任何明显的还是我应该发布更多的代码?
我试图将“加载”的状态从true更改为false,但当我调用一个函数并在该函数中设置“this.setState({loading:false})”时,加载状态仍然保持true。 在下面的代码中,当按钮按钮函数被调用时,它将“加载”状态设置为真,但当用户成功登录“加载”状态时,应该变为假,这样我的渲染按钮函数将重新渲染,旋转器可以隐藏自己并显示按钮。 为什么LoginSAccess函数中的“加载”
本文向大家介绍描述下在react中无状态组件和有状态组件的区别是什么?相关面试题,主要包含被问及描述下在react中无状态组件和有状态组件的区别是什么?时的应答技巧和注意事项,需要的朋友参考一下 1,无状态组件主要用来定义模板,接收来自父组件props传递过来的数据,使用{props.xxx}的表达式把props塞到模板里面。无状态组件应该保持模板的纯粹性,以便于组件复用。创建无状态组件如下: v
本文向大家介绍react中的setState和replaceState的区别是什么?相关面试题,主要包含被问及react中的setState和replaceState的区别是什么?时的应答技巧和注意事项,需要的朋友参考一下 [react] react中的setState和replaceState的区别是什么?
我正在创建一个应用程序,用户可以在其中设计自己的表单。例如。指定字段的名称以及应包括的其他列的详细信息。 该组件在这里可以作为JSFiddle使用。 我最初的状态是这样的: 如何创建以使其更新?
问题内容: 我正在尝试学习如何实现React表单(ES6语法)并将每个字段的onChange事件传递到负责更新状态的控制器父组件。这对于标准html元素来说效果很好,但是我正在尝试对日期字段使用预先罐装的Datepicker(https://www.npmjs.com/package/react- bootstrap-date-picker ),并且无法随时通过事件以相同的方式备份到父级。有没有简