Реакция ожидания для извлечения данных с аксиосами, прежде чем запуск следующей строки не работает - PullRequest
0 голосов
/ 29 января 2019

вот краткий обзор моего компонента OneRoadmap: в async componentDidMount я сначала вызываю «await this.props.getRoadmaps», который является действием в моем Redux, это действие отправит запрос на получение моего API, который будет получатьэлементы из моей базы данных, затем из этих полученных элементов мы отправляем отправку редуктору с вызовом GET_ROADMAPS, это делается как

export const getRoadmaps = () => dispatch => {
dispatch(setRoadmapsLoading());
axios
.get("/api/roadmaps")
.then(res => dispatch({ type: GET_ROADMAPS, payload: res.data }));
};

, и мой компонент выглядит так:

async componentDidMount() {
await this.props.getRoadmaps();
var location1 = this.props.location.pathname;
var n = location1.slice(9);

var current_roadmaps = this.props.roadmap.roadmaps;

this.displayRoadmap = current_roadmaps.filter(
  eachRoadmap => eachRoadmap._id == n
);
// now we have a roadmap

this.setState({
  treeData: this.displayRoadmap[0].roadmap[0],
  loading: false
});
}

GET_ROADMAPS обновит мое состояние Redux.

Проблема выглядит следующим образом: await this.props.getRoadmaps () будет только ждать, пока getRoadmaps () отправит диспетчер GET_ROADMAPS, что означает, что он не будет ждать, пока GET_ROADMAPS обновит состояние избыточности , это означает, что несколькими строками позже, когда я сделаю this.props.roadmap.roadmaps, оно будет неопределенным, потому что this.props.roadmap.roadmaps, вероятно, вызывается до того, как GET_ROADMAPS завершит обновление моего состояния избыточности.

Пожалуйста, помогите мне, если есть какие-либо способы решить проблему :) и, пожалуйста, исправьте меня, если проблема не в том, что я думаю.

PS Я ссылался на https://www.robinwieruch.de/react-fetching-data, эта информация там обычно будет работать, но, похоже, так как у меня есть дополнительная отправка в мое хранилище с избыточностью, отправка обновляет хранилище после того, как я вызываю this.props.roadmap.roadmaps, что означает, что я получаю неопределенное значение и не могу использовать эту переменную при рендеринге

1 Ответ

0 голосов
/ 29 января 2019

Кажется, вы не возвращаетесь в своем действии создателя.Вы должны явно вернуться, когда создаете блок (используйте фигурные скобки).

Верните вызов axios, и он должен работать правильно.

...