У меня есть асинхронная функция, которая использует redux, она вызывает API и возвращает ответ от сервера:
function xyz() {
return async (dispatch, getState) => {
const { user: { token } } = getState();
return axios.get(API_URL, {
headers: {
Accept: "application/json",
"Content-Type": "application/json",
'jwt': token
}
})
.then(response => {
console.log(response.data.data);
return response.data.data;
})
.catch(function(error) {
console.log('error: ' + error.message);
});
};
}
Функция mapDispatchToProps определяется следующим образом:
const mapDispatchToProps = (dispatch, ownProps) => {
return {
xyz: () => {
dispatch(actions.xyz());
}
};
};
export default connect(null, mapDispatchToProps)(Container);
Я пытаюсь вызвать функцию xyz из следующей функции:
abc = async () => {
const { xyz } = this.props;
const result = await xyz();
console.log(result);
}
, которая срабатывает при нажатии кнопки:
<TouchableOpacity onPressOut={this.abc}>
Я вижу, что console.log вфункция abc печатает неопределенное значение, а console.log (result.data.data) в xyz печатает ожидаемый результат.Где я не прав?
Решение
Ошибка была в функции mapDispatchToProps, в которой отсутствовал возврат.Вот это правильная реализация:
const mapDispatchToProps = (dispatch, ownProps) => {
return {
xyz: () => {
return dispatch(actions.xyz());
}
};
};
export default connect(null, mapDispatchToProps)(Container);