Состояние в состоянии, потому что редуктор возвращает обещание вместо разрешенных данных. Чтобы удовлетворить ваши требования, редуктор должен вызываться после выполнения асинхронной операции и разрешения данных. Поэтому вы можете захотеть переместить HTTP-запрос из редуктора создателю действия и отправить соответствующее действие, как только данные будут разрешены.
Обычно создатели действий хранятся в отдельном файле, например
личностно-деталь-actions.js
import Http from "../utils/Http";
import {PERSONAL_DETAIL} from "../constants/api";
import {GET_PERSONAL_DETAIL} from "../constants/personsal-detail-constants";
export const setPersonalDetail = payload => ({
type: GET_PERSONAL_DETAIL,
payload,
});
export const fetchPersonalDetail = () => dispatch => {
return Http.get(PERSONAL_DETAIL).then(response => {
return dispatch(setPersonalDetail(response.data.data));
}).catch(e => {
console.error(e);
});
}
Поскольку асинхронная операция теперь изолирована в создателе действий, редуктор упрощается:
персональный детализация-reducer.js
import {GET_PERSONAL_DETAIL} from "../constants/personsal-detail-constants";
const initialState = {
data: ''
};
const personalDetailReducer = (state = initialState, action) => {
switch (action.type) {
case GET_PERSONAL_DETAIL:
return {
...state,
data: action.payload
};
default:
return state;
}
};
export default personalDetailReducer;
Последнее, что нужно сделать, это заставить компонент вызывать создателя действия (не забудьте импортировать его в компонент):
личностно detail.js
const mapStateToProps = (state) => {
return{
state
}
};
const mapDispatchToProps = (dispatch) => {
return {
onGetPersonalDetail: () => dispatch(fetchPersonalDetail())
}
}
export default connect(mapStateToProps, mapDispatchToProps) (TutorPersonalDetail);