reactjs - 使动作创建者不分派动作
问题描述
我有以下动作创建者:
export const toggleLoginModal = () => {
return {
type: "TOGGLE_LOGIN_MODAL",
};
};
我在我的容器上使用它连接():
export default connect(null, {toggleLoginModal})(MyComp);
这是一个“愚蠢”的动作创建者——它总是返回相同的对象。我希望它通过检查 redux 存储来检查用户是否已经登录,如果用户已登录,它根本不应该调度任何操作。
我想过在动作创建者中返回一个空值,但我认为这是不好的做法......此外,返回一个意味着“忽略此动作”的动作似乎也不正确......
动作创建者是否有可能根本不分派动作?如果是这样,这将如何合并到 connect 方法中?
解决方案
在我看来,你有三个选择:
- 通过将逻辑
toggleLoginModal
包装在组件中来防止调用isLoggedIn
- 使用
redux-thunk
以访问商店,并且可以选择根本不dispatch
执行任何操作 - 在你的 reducer 中处理这种逻辑,尽管我可能会三思而后行。
例子:
示例 1:假设您可以通过查看状态来判断用户是否已登录
class MyComp extends Component {
render () {
return (
<div>
{!this.props.isLoggedIn && <button onClick={() => toggleLoginModal()}>Toggle</button>}
</div>
);
}
}
示例 2:使用redux-thunk
中间件,假设您有一个auth
reducer 或类似的东西。
function toggleLoginModal () {
return (dispatch, getState) => {
const { auth } = getState();
if (auth.isLoggedIn) {
return;
}
dispatch({
type: "TOGGLE_LOGIN_MODAL",
});
};
}
如果这符合您的要求,我会完全隐藏按钮(示例 1)。
推荐阅读
- python - 如何覆盖 NumPy 的 ndarray 隐式布尔值?(即 __bool__ 函数)
- mysql - 当一列包含 sha2 哈希时,如何从转储文件中恢复 mysql db?
- python - 如何在我迭代数据帧中的行时加快这个循环
- refit - 改装不使用配置的 JsonConverter
- javascript - Json字符串数字格式
- javascript - 如何修复计时器停止功能中的错误?
- azure - 使用 Azure Function Cosmos DB Changefeed 触发器使用 NServiceBus 发布消息
- python - 启动 Python 子进程方法的进程无法访问 Windows FS 中的其他文件
- flutter - 在颤振中调用时获取空值检查运算符用于空值错误
- python - 如何修复 Networkx 中某些节点的位置?