У меня есть родительский компонент React, состояние которого содержит некоторое количество экземпляров класса React.Component
. Я делаю это так, потому что в этих дочерних классах есть несколько методов, которые мне нужно вызывать и вызывать в разных случаях. Вот упрощенный пример, показывающий это
interface ChildState {
foo: number
}
interface ParentState {
children: Child[]
}
class Child extends React.Component<{}, ChildState> {
public constructor(props: {}) {
super(props);
this.state = {
foo: 1
}
}
public increase(): void {
this.setState({
foo: this.state.foo + 1
})
}
public render(): JSX.Element {
return <div>{this.state.foo}<br/></div>
}
}
class Parent extends React.Component<{}, ParentState> {
public constructor(props: {}) {
super(props);
this.state = {
children: [
new Child({}),
new Child({}),
new Child({})
]
}
}
public render(): JSX.Element {
return <div>
<button
onClick={() => {
for (const child of this.state.children) {
child.increase();
}
}}
>
Increment
</button>
{this.state.children.map((child, index) => <div key={index}>{child.render()}</div>)}
</div>
}
}
. Я могу подтвердить, что Child.increase
вызывается с console.log
, но фактическая переменная состояния foo
всех дочерних элементов не изменяется. . Почему состояние этих детей не затрагивается?
Кроме того, нужно ли мне беспокоиться о повторном вызове render()
, когда эти состояния можно будет правильно обновить?