Состояние компонента ReactJS не меняется должным образом
Я создал Container
класс и InnerElement
учебный класс. Где Container
оборачивает InnerElement
s. Нужно показать только один InnerElement
в данный момент.
Проблема появляется, когда я перехожу на другую InnerElement
, Интересно, когда я создаю console.log
он отображает измененный элемент, но не отображается. Может ли кто-нибудь дать мне подсказку, пожалуйста, спасибо заранее!
Container
учебный класс:
import React from 'react';
export default class Container extends React.Component {
constructor(props) {
super(props);
this.changeElement = this.changeElement.bind(this);
this.state = {
currentElement: 0,
}
}
changeElement() {
const nextElement = this.state.currentElement + 1;
this.setState({currentElement: nextElement});
}
render() {
const element = this.props.children[this.state.currentElement];
// In the console log the next (correct) element is shown
console.log(element);
return (
<div>
{element}
<button onClick={this.changeElement}>next element</button>
</div>
);
}
}
Здесь InnerElement
учебный класс:
import React from 'react';
export default class InnerElement extends React.Component {
constructor(props) {
super(props);
this.state = {
name: props.name ? props.name : "test"
}
}
render() {
return (
<div>
{this.state.name}
</div>
);
}
}
И вот мой Container
с InnerElement
вызов:
<Container>
<InnerElement name="A" />
<InnerElement name="B" />
<InnerElement name="C" />
<InnerElement name="D" />
</Container>
Я также обнаружил, что это работает, когда я использую в InnerElement this.props.name
вместо гос.
1 ответ
Реагируйте на проблемы, определяя, что ваши дети меняются вместе с вашим setState
потому что вы динамически модифицируете детей. Чтобы помочь React сделать это, вы можете добавить ключ к своему InnerElement:
<Container>
<InnerElement key="A" name="A" />
<InnerElement key="B" name="B" />
<InnerElement key="C" name="C" />
<InnerElement key="D" name="D" />
</Container>