node.js - Redux Toolkit - Slice 实用方法
问题描述
我正在使用 redux-toolkit 构建一个 React 应用程序,并且我正在使用 redux-toolkit 的帮助函数createSlice将我的商店分成一些切片。
这是一个简单的用例:
const sidebar = createSlice({
name: "sidebar",
initialState:
{
menus: {}, // Keep track of menus states (guid <-> open/close)
visible: true
},
reducers:
{
show(state, action)
{
state.visible = action.payload.visible;
},
setMenuOpen(state, action)
{
const { id, open } = action.payload;
state.menus[id] = open;
return state;
}
}
});
export default sidebar;
一切正常,直到我将操作(更改存储)“添加”到切片,但考虑您的团队正在寻找实用功能“getMenuOpen”:此方法不会更改存储(它不是操作,不能添加到减速器目的)。您当然可以直接从存储中读取数据 (state.menus[<your_id>]),但考虑一个更复杂的示例,其中操作数据需要一些库导入、更复杂的代码等...我想模块化/隐藏每一片尽可能的多。
实际上我正在使用这种解决方法:
const sidebar = createSlice({ /* Same previous code... */ });
sidebar.methods =
{
getMenuOpen: (state, id) => state.menus[id]
};
export default sidebar;
上面的代码允许从组件导入切片,mapStateToProps 到 redux 存储,并像这样调用实用函数getMenuOpen:
import sidebar from "./Sidebar.slice";
// Component declaration ...
const mapStateToProps = state => ({
sidebar: state.ui.layout.sidebar,
getMenuOpen(id)
{
return sidebar.methods.getMenuOpen(this.sidebar, id);
}
});
const mapDispatchToProps = dispatch => ({
setMenuOpen: (id, open) => dispatch(sidebar.actions.setMenuOpen({id, open}))
});
丑陋的部分是我需要将切片节点(this.sidebar)作为 getMenuOpen 的第一个参数注入,因为它不是从 redux-toolkit 自动映射的(对于带有 reducers/actions 的操作)。
所以我的问题是:如何清理我的解决方法以便自动映射商店的实用功能?createSlice似乎不支持这一点,但也许一些内部 redux 的 api 可以帮助我将我的“slice.methods”自动映射到商店。
谢谢
解决方案
推荐阅读
- node.js - 在 pm2 配置中启动多个脚本
- reactjs - 重定向到登录页面后,显示 Toaster 消息
- django - Django 身份验证 JWT 与 Oauth2
- python - 使用 1d 列索引数组切片和填充 2d 数组
- mysql - MySql查询运行余额校正
- python - 生成器表达式与生成器函数以及令人惊讶的急切评估
- xamarin - Xamarin 表单列表视图 - 显示图像全宽,自动高度
- knockout.js - Knockout Binding 问题,只能通过匿名函数获取值
- php - Auth guard [:api] 没有定义?
- google-apps-script - 使用 Google Apps 脚本删除或替换 Google 表格单元格中的“未定义”字符串