当在**“dispatch(saveItem(item))"上使用“await”**时,它不应该有任何效果,
同时,如果我不使用“await”,两个函数将同时运行,结果是保存的项目,而不是组件重新渲染。
尽管redux存储中的状态发生了变化,但视图并没有发生变化,使用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>
);
}
1条答案
按热度按时间8ulbf1ek1#
您可以尝试以下方法:
对我有用。