Reactjs 允许操作创建者不分派操作

Reactjs 允许操作创建者不分派操作,reactjs,redux,Reactjs,Redux,我与以下动作创建者有关联: export const toggleLoginModal = () => { return { type: "TOGGLE_LOGIN_MODAL", }; }; 我正在connect()的容器上使用它: 这是一个“愚蠢”的动作创建者-它总是返回相同的对象。 我希望它通过检查redux存储来检查用户是否已经登录,如果用户已经登录,它就不应该发送任何操作 我曾想过在action creator中返回空值,但我认为这是一种糟糕的做法。。。 此外,

我与以下动作创建者有关联:

export const toggleLoginModal = () => {
  return {
    type: "TOGGLE_LOGIN_MODAL",
  };
};
我正在connect()的容器上使用它:

这是一个“愚蠢”的动作创建者-它总是返回相同的对象。 我希望它通过检查redux存储来检查用户是否已经登录,如果用户已经登录,它就不应该发送任何操作

我曾想过在action creator中返回空值,但我认为这是一种糟糕的做法。。。 此外,返回一个表示“忽略此操作”的操作似乎也不正确

动作创建者是否可能根本不发送动作?
如果是这样的话,这将如何融入连接方法中?

在我看来,您有三个选项:

  • 通过在组件中包装
    isLoggedIn
    逻辑,防止调用
    toggleLoginModal
  • 使用
    redux thunk
    访问存储,并且可以选择根本不执行
    dispatch
    操作
  • 在减速机中处理这种逻辑,尽管我可能会三思而后行
  • 示例:

    示例1:假设您可以通过查看状态来判断用户是否登录

    class MyComp extends Component {
      render () {
        return (
          <div>
            {!this.props.isLoggedIn && <button onClick={() => toggleLoginModal()}>Toggle</button>}
          </div>
        );
      }
    }
    
    如果符合您的要求,我会完全隐藏按钮(示例1)

    class MyComp extends Component {
      render () {
        return (
          <div>
            {!this.props.isLoggedIn && <button onClick={() => toggleLoginModal()}>Toggle</button>}
          </div>
        );
      }
    }
    
    function toggleLoginModal () {
      return (dispatch, getState) => {
        const { auth } = getState();
    
        if (auth.isLoggedIn) {
          return;
        }
    
        dispatch({
          type: "TOGGLE_LOGIN_MODAL",
        });
      };
    }