如何重置react-redux的值?

问题描述 投票:0回答:3

我一直在使用 MERN 堆栈。
我想知道如何重置 redux 值中的值。
如果我将错误的数据发送到后端

/login
路线,我会得到
'Invalid email or password'
并且我将其保存为 redux。我在前端看到了这一点。更改路线时以及将路线更改为登录(反应)页面后,我会看到此消息。如果我刷新页面 redux 重置。
我有一个问题如何重置值无需刷新更改路线

javascript reactjs redux react-redux react-router-dom
3个回答
0
投票

我从你的问题中得到的是,当你从页面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: ''
      }
  }
}

0
投票
import {reset} from 'redux-form';

...

dispatch(reset('myForm'));  // requires form name

0
投票

如果我理解正确,那么你的问题是,在一次调度(使用 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。

© www.soinside.com 2019 - 2024. All rights reserved.