![](/img/trans.png)
[英]How do i properly use useEffect for a async fetch call with react? react-hooks/exhaustive-deps
[英]Using react + hooks, how can i call/use "navigate()" after a async redux dispatch properly?
在“dispatch(saveItem(item))”上使用“await”时,它不应该有任何效果,
同时,如果我不使用“等待”,这两个函数将同时运行,从而导致保存的项目而不是组件重新渲染。
尽管 redux 存储中的 state 更改了视图,但使用 await 实际上等待调度完成然后运行导航。
我的主要问题是如何在 redux 调度后正确导航?
import { useEffect, useRef, useState } from 'react';
import { useDispatch } from 'react-redux';
import { useNavigate, useParams } from 'react-router-dom';
import { useForm } from '../hooks/useForm';
import { getById } from '../services/itemService';
import { saveItem } from '../store/actions/itemActions';
export function ItemEdit() {
const dispatch = useDispatch();
const navigate = useNavigate();
const [item, handleChange, setItem] = useForm(null);
const itemId = useParams().id;
useEffect(async () => {
await loadItem();
}, []);
const loadItem = async () => {
try {
const item = await getById(itemId)
setItem(item);
} catch(err) {
setErrMsg(err.name + ': ' + err.message);
}
};
const onSaveItem = async (ev) => {
ev.preventDefault();
await dispatch(saveItem(item));
navigate('/item')
}
return (
<form onSubmit={onSaveItem}>
<button>Save</button>
</form>
);
}
你可以这样尝试:
dispatch(saveItem(item))
.unwrap()
.then(() => navigate('/item'))
.catch(error => 'handle error')
这个对我有用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.