我是 ReactJS 的新手,我在我的项目中使用向导表单,它使用户能够进行下一步和上一步。我复制了下一个按钮的一些代码,但老实说不明白它的意思。
你能帮我理解下面的代码吗:
next() {
this.setState(prevState => ({ current: prevState.current + 1 }));
}
我是 ReactJS 的新手,我在我的项目中使用向导表单,它使用户能够进行下一步和上一步。我复制了下一个按钮的一些代码,但老实说不明白它的意思。
你能帮我理解下面的代码吗:
next() {
this.setState(prevState => ({ current: prevState.current + 1 }));
}
感谢您的贡献。
正如评论中所建议的,您可能应该查看文档,但由于您是新的贡献者,我想我会尝试回答您的问题。
每个组件react类都有一个“状态”。当“状态”更新时,组件将重新渲染。setState
是用于更新组件状态的方法。this
指组件本身。
您的组件state
对象可能是这样开始:{ current: 0, something: 'foo' }
。
当你调用时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))