在 React 中使用 setState 更新对象

IT技术 javascript reactjs
2021-05-12 03:44:38

如何将多个状态传递给setState下面是一个例子:

getInitialState: function() {
  return {
    list: [],
    newFilm: {},
    searchWord: '',
    searchDetails: {}
  }
},

componentDidMount: function() {
  this.setState({
    searchDetails:someData,
    newFilm: 'I am first text',
  })
}

问题是:

该示例在语法上是否正确?

1个回答

您设置状态的方式没有语法问题,但是您初始化状态的方式可能有问题。您已将 newFilm 初始化为对象状态,但是当您设置其状态时,您将给出一个字符串。所以假设你试图渲染它,就像{this.state.newFilm}它会给你一个错误

对象作为 React 子对象无效(找到:带有键 {} 的对象)。

正如您在下面的代码段中看到的那样,由于组件第一次被渲染,它会看到一个对象,后来它只看到一个字符串。

为了解决这个问题的尝试初始化你的国家,newFilm作为''或采取预防,当您尝试呈现,即检查它包含了一些数据,然后只渲染。

我也没有someData在你的componentDidMount函数中看到定义您需要先定义它,然后才能使用它。

var App = React.createClass({
  getInitialState: function() {
  return {
    list: [],
    newFilm: {},
    searchWord: '',
    searchDetails: {}
  }
},

componentDidMount: function() {
  var someData = {'name': 'abc'};
  this.setState({
    searchDetails:someData,
    newFilm: 'I am first text',
  })
},
render: function() {
  console.log(this.state.newFilm);
  return (
    <div>{this.state.newFilm}</div>
  )
}
})

ReactDOM.render(<App/>, document.getElementById('app'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.14.8/react.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.14.8/react-dom.js"></script>
<div id="app"></div>