У меня есть массив объектов (языковые коды и имена), которые я пытаюсь распределить в другой массив в локальном состоянии в компоненте реакции. Структура массива, который я пытаюсь распространить, выглядит следующим образом:
let langs = [
{code: "af", name: "Afrikaans"},
{code: "sq", name: "Albanian"}
]
Я пробую что-то просто такое:
this.setState({
languages: [...langs]
},
console.info(this.state.languages);
);
Когда я пытаюсь использовать console.info languages в обратном вызове из setState, массив пуст. Что здесь не так?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Второй параметр - это обратный вызов - вы немедленно выполняете console.info и передаете его результат в качестве обратного вызова. Измените код на этот:
this.setState({
languages: [...langs]
},
() => console.info(this.state.languages);
);
setState является асинхронным, и вам нужно вызвать функцию в обратном вызове.
this.setState({
languages: [...langs]
}, () => console.info(this.state.languages)
);
Ааааа, теперь я чувствую себя такой глупой, спасибо Стэнли и Джеймику!
setState - это асинхронное действие. Используйте console.info () в обратный вызов setState или в render ();