我一直在使用 MERN 堆栈。
我想知道如何重置 redux 值中的值。
如果我将错误的数据发送到后端
/login
路线,我会得到 'Invalid email or password'
并且我将其保存为 redux。我在前端看到了这一点。更改路线时以及将路线更改为登录(反应)页面后,我会看到此消息。如果我刷新页面 redux 重置。 我从你的问题中得到的是,当你从页面a切换到页面b时,你想从你的redux存储中清除“无效的电子邮件或密码”。
您可以做的就是通过创建和操作重置为“redux 中的数据”,并在页面 a 内卸载时分派它。
a页
里面有这样的东西componentWillUnmount() {
dispatch(resetErrorMessageAction())
}
内部actions.js
function resetErrorMessageAction(data) {
return {
type: 'RESET_ERROR_MESSAGE'
}
}
在减速机内
function(state, action) {
switch(action.type) {
case 'RESET_ERROR_MESSAGE':
return {
...state,
errorMessage: ''
}
}
}
import {reset} from 'redux-form';
...
dispatch(reset('myForm')); // requires form name
如果我理解正确,那么你的问题是,在一次调度(使用 redux 的 api 调用)之后,你的 redux 状态会获取一些数据,当你另一次调度时,你会得到之前存储的 redux 值,就像我所处的情况一样目前。
当我注销后,我的 redux 得到一个值“注销成功”,并且在不刷新浏览器的情况下登录,然后我得到 2x“注销成功”。
这是避免这种情况的简单方法:-
第 1 步:- 在之前的减速器案例之后创建另一个减速器案例,并在所需的工作完成后清除它们。
.addCase('clearRedux', (state) => {
state.error = null;
state.message = null;
});
第 2 步:- 选择要在其中执行操作的减速器
const { message: logoutMessage, error: logoutError } = useSelector((state)=>state.logoutWorker);
第 3 步:- 在需要时发送案例
useEffect(() => {
if (logoutMessage) {
alert.success(logoutMessage);
dispatch(loadWorker());
dispatch({
type: 'clearRedux'
});
}
if (logoutError) {
alert.error(logoutMessage);
dispatch({
type: 'clearRedux'
});
}
}, [dispatch, logoutMessage, logoutError]);
我希望您的错误能够得到解决,祝您编码日愉快#eat_sleep_code_repeat。