У меня проблема из-за асинхронного вызова c. У меня есть действие, которое делает вызов API и выдвигает на страницу Dashboard. Этот вызов API также обновляет state.account.id
в зависимости от ответа, который он возвращает:
const submitLogin = e => {
e.preventDefault();
props.loginAndGetAccount(credentials);
props.history.push('/protected');
e.target.reset();
}
loginAndGetAccount
исходит от этого действия:
export const loginAndGetAccount = credentials => dispatch => {
dispatch({ type: GET_ACCOUNT_START })
axios
.post('https://foodtrucktrackr.herokuapp.com/api/auth/login/operators', credentials)
.then(res => {
console.log(res);
dispatch({ type: GET_ACCOUNT_SUCCESS, payload: res.data.id })
localStorage.setItem("token", res.data.token)
})
.catch(err => console.log(err));
}
На странице панели инструментов у меня есть useEffect, настроенный для динамического вызова другого API на основе значения, хранящегося в state.account.id
. Однако, похоже, что первый вызов API передается на страницу Dashboard, прежде чем ответ возвращается и обновляется state.account.id
. Поэтому, когда второй вызов API делается там, он передает state.account.id
этому динамическому вызову API 1020 * как неопределенный, что, конечно, приводит к неудачному вызову. Как я могу решить это? Вот что происходит:
const Dashboard = props => {
const [accountInfo, setAccountInfo] = useState({});
useEffect(() => {
console.log(props.accountId);
axiosWithAuth()
.get(`/operator/${props.accountId}`)
.then(res => {
console.log(res);
})
.catch(err => console.log(err));
}, [])
return (
<div>
<h1>This is the Dashboard component</h1>
</div>
)
}
const mapStateToProps = state => {
return {
accountId: state.account.id
}
}
export default connect(mapStateToProps, {})(Dashboard);