Этот фрагмент кода копирует мою проблему из программного обеспечения, над которым я сейчас работаю в этой компании X.
import React, { Component } from 'react';
import { render } from 'react-dom';
import Hello from './Hello';
import './style.css';
class App extends Component {
constructor() {
super();
this.state = {
name: 'React',
some:{
name:"axys",
a:[1,2.23,46,612,5],
z:{
a:2,
b:5,
c:6,
}
}
};
}
handler = () =>{
console.log(this.state);
this.setState({
some:{
z:{
a:1111
}
}
},()=>{
console.log(this.state);
})
}
render() {
return (
<div>
<Hello name={this.state.name} />
<button onClick = {this.handler}>
Change State
</button>
</div>
);
}
}
render(<App />, document.getElementById('root'));
Допустим, я хочу изменить значение this.state.some.zaТо, что я изначально был
this.setState({
some:{
z:{
a:1111
}
}
}
Но оказалось, что мне возвращено состояние
{
"name": "React",
"some": {
"z": {
"a": 1111
}
}
}
Так что для получения намеченного результата мне нужно написать
this.setState({
some:{
...this.state.some,
z:{
...this.state.some.z,
a:1111
}
}
}
Так что мой вопрос в том, является ли это правильным / рекомендуемым способом выполнения действий или я что-то упускаю.
Если это правильный путь, не будет ли зависеть от производительности setState от оператора распространения (...)