如何调用具有先前状态的setState以及redux连接受控组件中的附加值?

时间:2018-03-06 17:26:18

标签: reactjs react-redux

如何使用先前的状态调用setState以及受控组件中的附加值?

典型的例子是:

Increment() {
    this.setState((prevState, props) => ({counter: prevState.counter = props.step})
}

但是,如何根据prevState和处理程序中的值更新状态。 例如(我知道这个例子是错误的,因为你不能将值传递给setState回调):

HandleOnAddItem(evt, { value }) {
    this.setState((prevState, props, value) -> ({items: value, ...prevState.items})
}

2 个答案:

答案 0 :(得分:7)

如果要在事件处理函数中传递该值,那么它将在setState中可用而不会传递给updater函数。

像这样写:

HandleOnAddItem(evt, { value }) {
    this.setState((prevState, props) => ({items: value, ...prevState.items}))
}

如果您只更新一个不依赖于先前状态的状态属性,我认为在您的情况下,那么直接您可以写:

HandleOnAddItem(evt, { value }) {
    this.setState({ items: value })
}

查看此答案以获取更多详细信息:How do JavaScript closures work?

示例:



//setTimeout will call the method after 2sec, similar to setState
let abc = a => {setTimeout(() => console.log('a', a), 2000)}; 

abc(10);




答案 1 :(得分:1)

由于javascript closures,内部函数可以访问外部函数的变量,在setState callback中可以获得作为参数传递给处理函数的值。您可以像

一样使用它
HandleOnAddItem(evt, { value }) {
    this.setState((prevState, props) -> ({items: value, ...prevState.items})
}