我想了解 ReactJS 中的 SetState 和 Prevstate

IT技术 javascript reactjs
2021-05-01 22:56:30

我是 ReactJS 的新手,我在我的项目中使用向导表单,它使用户能够进行下一步和上一步。我复制了下一个按钮的一些代码,但老实说不明白它的意思。

你能帮我理解下面的代码吗:

next() {
    this.setState(prevState => ({ current: prevState.current + 1 }));
}
2个回答

感谢您的贡献。

正如评论中所建议的,您可能应该查看文档,但由于您是新的贡献者,我想我会尝试回答您的问题。

State 和 setState 如何工作

每个组件react类都有一个“状态”。当“状态”更新时,组件将重新渲染。setState是用于更新组件状态的方法。this指组件本身。

您的组件state对象可能是这样开始:{ current: 0, something: 'foo' }

next() 在做什么

当你调用时next(),那么setState也会被调用。setState用回调调用。回调提供了一个参数,这里命名为prevState- prevState 是state组件上的当前值,因此{ current: 0, something: 'foo' }.

的返回值setState将设置提供的状态对象上的任何字段。调用后this.setState, 的新值component.state将是{ current: 1, something: 'foo' }

重新渲染

将触发组件的重新渲染,因为新状态和先前状态对象的浅比较将返回false

希望这可以帮助!

正如我在评论中提到的,您需要查看文档本身以了解有关setState 如何工作的更多信息

在这里,我想说明为什么我们需要它?

在react状态下是不可变的,即。说你不能直接改变状态,比如:

state = { current: 1 }
// ...and somewhere in your code
this.state.current = 2 // won't work
this.state.current = this.state.current + 1 // also, no luck
console.log(this.state.current) // 1
// the reason is immutable

所以,你需要更新状态而不改变它。因此,react 为我们提供了公开使用 setState 的机会。

setState 有两个参数:更新程序和回调。

更新程序可以接受状态和props。这样您就可以根据状态和props或以其他方式更新状态检查其条件。

回调在 setState 中提供,因此您可能知道它的效果就像current现在一样。请参阅下面的示例:

this.setState((state, props) => { // previous state, previous props
  // you may additionally check some condition
  // or combine state and props
  // like, state.current + props.value
  return { current: state.current + 1 }
}, () => {
// ^^- callback
  console.log(this.state.current)
})

顺便说一句,有一些不同的选项可以使用 setState:

a) without updater and callback
eg. setState({current: 2})
b) with updater param only
eg. setState(()=>({current: 2}))
c) with updater and callback
eg. see preceding example of code
d) without updater but with callback
eg.  setState({current: 2},()=>console.log(this.state.current))