【问题标题】:REACT, Help me understand prevStateREACT,帮我理解 prevState
【发布时间】:2021-02-03 03:39:11
【问题描述】:

这样定义这个counterHandler有什么区别

counterHandler = () => {
        this.setState(() => {
            return { times: this.state.times + 1 }
        });
    }

还有这个?

 counterHandler = () => {
            this.setState((prevState) => {
                return { times: prevState.times + 1 }
            });
        }

组件的状态是否总是自动传递给 setState?

【问题讨论】:

  • 我认为这可能会回答您的问题。 stackoverflow.com/a/55496277/8546128
  • this.setState 异步设置值,如果this.state.times 初始化为1 并且您在同一处理程序中调用this.setState(() =>{ return { times: this.state.times + 1 }; }) 两次,则this.state.times 中的结果值将是2。如果你对this.setState((currentState) =>{ return { times: currentState.times + 1 }; }) 做同样的事情,你最终会得到this.state.times of 3
  • 是的,如果您将函数传递给setState,则当前状态将作为参数传递给函数。与this.setState({ times: state.times + 1 })比较。

标签: javascript reactjs react-native react-redux


【解决方案1】:

如果你只使用一个状态内的数据,你不需要做prevState的回调, 但是如果你的 state 不止一个,你需要回调 prevstate,因为这样会让你其他和之前的数据都不会丢失。

例如

const [state, setState] = useState({
loading: false,
data: []
})

const handleLoading = () => {
setState({
loading: true
})
}

const handleData = () => {

setState({
data: [a,b,c] // you will lost your loading = true
})}

const handleData = () => {
setState((prevState) => {
...prevState,
data: [a,b,c] // you still have loading = true
})
}

【讨论】:

    猜你喜欢
    • 2022-10-08
    • 2020-08-20
    • 2011-01-13
    • 1970-01-01
    • 2019-05-02
    • 2010-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多