javascript - 在这种情况下,React 中的 setState 是如何工作的?

标签 javascript reactjs setstate

我正在尝试设置数组中对象的状态。我已经实现了,但我不明白。

toggleVisited = countryCode => {
  var countries = [ ...this.state.countries ];
  var countryToChange = countries.find(country => country.code === countryCode);
  countryToChange.visited = !countryToChange.visited;
  this.setState({ countryToChange });
}

我了解(主要)发生了什么,直到最后 this.setState 行。

我将代码更改为 this.setState({}) 并且它仍然有效。我一直认为设置状态是为对象键设置新值。为什么(无论我在这里输入什么),它仍然设置正确吗?

最佳答案

使用 countryToChange.visited = !countryToChange.visited,您正在改变当前状态。 Don't do this.而是创建一个新对象:

toggleVisited = countryCode => {
    this.setState(prevState => {
        const countries = prevState.countries.map(country => country.code !== countryCode
            ? country
            : {
                ...country,
                visited: !country.visited
            })
        const countryToChange = countries.find(country => country.code === countryCode)

        return {
            countries,
            countryToChange
        }
    })
}

关于javascript - 在这种情况下,React 中的 setState 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54173153/

相关文章:

javascript - 消费者的服务 'AnalyticsDefaultGroup' 的配额 'USER-100s' 和限制 'analyticsreporting.googleapis.com' 的 token 不足

javascript - 获取 Javascript JSON 字符串中的参数值?

node.js - 带有 React 的 Google 语音转文本

javascript - 如何给 setState 函数一个事件

javascript - 在一堆 div 上设置内容的最有效/最快的方法

javascript - 实现像 jQuery 这样的可链接 JavaScript 框架的最直接方法是什么?

javascript - 传递对象时防止在 PureComponent 上重新渲染

reactjs - React Material UI 一切都大写

javascript - React : Changing State in functional component also Change functional component's props value, 及其父类状态

arrays - 在状态 onChange 时将复选框值推送到数组