Никогда не сохраняйте фактические элементы в state
. State должен содержать только чистые данные для отображения, а не фактическую разметку. Вместо этого сделайте ваш метод render()
условным рендерингом в зависимости от состояния:
class MyComp extends React.Component {
state = {
isLoggedIn: false,
};
render() {
const {isLoggedIn} = this.state;
return (
<div>
{/* conditionally render based on isLoggedIn */}
<p>{isLoggedIn ? 'You are logged in' : 'Please log in.'}</p>
<button onClick={() => this.setState({isLoggedIn: true})}>
Log In
</button>
</div>
);
}
}
Ваш метод render()
будет вызываться при каждом изменении state
. Затем React будет различать результат рендеринга и обновит DOM, где элементы изменились.
Вы также не должны вызывать setState()
в al oop. Сначала соберите изменения, а затем вызовите setState
со всем измененным массивом. Чтобы на самом деле добавить что-то к существующему массиву в state
, вы должны сделать:
this.setState(state => {jsxComp : [...state.jsxComp, newElement]});