Есть такой компонент:
export class Example extends Component {
constructor(props) {
super(props);
this.state = {
num: 81,
board: [],
};
}
componentDidMount() {
this.create(this.state.num);
}
create = (num) => {
for (let i = 0; i < num; i++) {
let newelement = {
x: 1,
y: 2
};
this.setState(prevState => ({
board: [...prevState.board, newelement]
}));
}
console.log(this.state.board);
}
render() {
return (
<div>
</div>
);
}
}
export default Example;
В нем я после того как произойдет маунт компонента вызываю функцию, которая должна наполнить стейт-массив элементами. Я вывожу этот стейт в консоль, но она показывает что массив пуст. Что я сделал не так?
Можно всё сделать гораздо проще
create = (num) => {
let board = Array(num).fill().map(() => ({
x: 1,
y: 2
}));
this.setState({
board
})
}
Вызов setState
в цикле не даёт ожидаемого результата, потому что состояние изменяется не сразу, а в определенный момент "жизненного цикла". Делать лог после цикла бесполезно - здесь состояние ещё старое.
Впрочем, если очень хочется сделать лог, то у setState
есть второй коллбэк, который выполняется после мутации состояния. Можно вставить лог туда, вот только вызовов будет много.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Кто-нибудь может пожалуйста объяснить более доходчивым образом, почему так происходит? Как я понимаю, в момент создания класса,не создания...
при нажатии кнопки нужно чт бы копировался майл под которым она находитсяСейчас все копи рую первое значение
Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском
Задача состоит в следующем: есть формаВо время того, когда курсор находится над формой, и пользователь нажимает левую кнопку мыши, в этой...