![](/img/trans.png)
[英]Save a react axios response of a .jpg into state then display that image from state
[英]Save axios response to state react hooks
我正在尝试使用钩子保存从 Axios 到 state 的响应。 但是,每当我尝试使用钩子时,组件都会继续重新渲染无限次。
const [orders, setOrders] = useState([]);
const getUserOrders = async () => {
await API.getOrders(window.sessionStorage.id)
.then(res => setOrders(res.data.ordersArr))
.catch(err => console.log(err));
}
useEffect(() => {
if (logged_in) {
getUserOrders();
} else {
window.location.href = "/login";
}
}, [orders])
如果我控制台日志 res.data.ordersArr 而不是使用 setOrders 挂钩,我可以看到预期的数据。 当我使用钩子时,它会不断重新渲染。
每次orders
state 更改时,您的useEffect
挂钩都会重新运行,当您的useEffect
挂钩运行时,您会从 API 获取数据,然后设置orders
。 这反过来又会触发具有新orders
值的渲染,从而使useEffect
调用无效并导致它再次触发,最终导致无限循环。
您只是想通过传递一个空的依赖项列表来强制useEffect
运行一次useEffect(..., [])
您需要重构几件事
orders
,它将无限次重新渲染.then
在 await 之后没有任何意义,要么摆脱 async / await 要么包括 promise 回调
const getUserOrders = () => {
API.getOrders(window.sessionStorage.id)
.then(res => setOrders(res.data.ordersArr))
.catch(err => console.log(err));
}
useEffect(() => {
if (logged_in) {
getUserOrders();
} else {
window.location.href = "/login";
}
}, [])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.