Monday, May 20, 2024
 Popular · Latest · Hot · Upcoming
102
rated 0 times [  106] [ 4]  / answers: 1 / hits: 35576  / 8 Years ago, tue, october 25, 2016, 12:00:00

How can I pass multiple states to setState? Here's an example:



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

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


The question is:



Is the example syntactically correct ?


More From » reactjs

 Answers
8

There is no syntax problem with the way you are setting state, but there could be a problem with the way you are initialising you state. You have initialized newFilm as an object state but when you set its state you are giving a string. So suppose you try to render it like {this.state.newFilm} it will throw you an error




Objects are not valid as a React child (found: object with keys {}).




as you can see in the snippet below, since the first time the component is rendered it sees an object where later its only a string.



To fix this try initializing you state newFilm as '' or take prevention when you try to render i.e. check where it contains some data and then only render.



Also I don't see someData defined in your componentDidMount function. You need to define it before you can use it.





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>




[#60275] Monday, October 24, 2016, 8 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
rebekahalysah

Total Points: 304
Total Questions: 96
Total Answers: 102

Location: Taiwan
Member since Mon, May 2, 2022
2 Years ago
;