3.18 Manipulating State
If you do this:
switchNameHandler = () => {
this.state.persons[0].name = 'Maximilian'
}
you get the error:
(property) persons: {
name: string;
age: number;
}[]
Do not mutate state directly. Use setState().eslint(react/no-direct-mutation-state)
DON'T DO THIS!
There actually only are two, changing state and what else? You could already see it in action, props.
You need to use setState method (this.setState).
setState method
danger
This feature only available in class-based components.
class App extends Component {
state = {
persons: [
{ name: 'Max', age: 28 }, // old state
{ name: 'Manu', age: 29 },
{ name: 'Stephanie', age: 26 }, // old state
],
otherState: 'some other value'
}
switchNameHandler = () => {
// DON'T DO THIS: this.state.persons[0].name = 'Maximilian'
this.setState({
persons: [
{ name: 'Maximilian', age: 28 }, // new state
{ name: 'Manu', age: 29 },
{ name: 'Stephanie', age: 27 }, // new state
],
})
}
tip
It will not discard otherState but it will simply merge the old state with the new one.
And this is the main difference from useState() hook.