reactjs - 将看不见的逻辑添加到只读状态 redux - 反应
问题描述
我已经标准化的事件如下所示:
"entities":{
"events":{
"123":{
... data
}
"124":{
...data
}
}}
我在一个简单的材料 ui 列表中显示列表
现在,当单击按钮时,列表中的任何新项目现在都“看不见”并且不应自动选择
我是否需要添加“看不见”:真/假。到基本的标准化数据?然后每次有新事件时发送更新?所以它看起来像:
"entities":{
"events":{
"123":{
... data
unseen:false
}
"124":{
...data
unseen: true
}
}}
还是最好保留一个新的未见过事件列表?我正在寻找一种更好的方法来处理它
在这种情况下我需要更改只读状态吗?因为现在我只更新一个完整的对象
还原状态:
export interface EventsEntities {
events: {
[id: string]: Event;
};
}
export interface EventState {
readonly entities: EventsEntities;
selectedItem: string | null;
readonly result: string[];
}
解决方案
Redux 状态中的每个值都被假定为只读,因此在这两种情况下都不需要删除它。
unseen
您可以使用 Redux 操作更改属性,例如
{
type: 'toggle-unseen-event',
eventId: '123',
unseen: true
}
并像这样在减速器中处理它:
function eventsReducer(state, action) {
switch(action.type) {
...
case 'toggle-unseen-event':
return {
...state,
events: {
...state.events,
[action.eventId]: {
...state.events[action.eventId],
unseen: action.unseen
}
}
}
...
}
}
正如你所看到的,我们没有改变事件对象,所以它可以是只读的。
Redux 状态的最佳设计取决于您想要使用数据的方式和位置。
如果某些组件中您仅使用事件数据(但不使用unseen
),那么最好将未见事件列表保存在 Redux 状态中的单独位置,以便更改unseen
属性不会导致重新渲染不使用事件数据的组件关心它。
但是,如果您unseen
在使用事件数据的任何地方都使用属性,那么最好将它们保存在同一个地方,这样您就不需要每次都合并看不见的列表和事件数据。
推荐阅读
- c# - 如何一次将相同的操作分配给多个按钮?
- regex - CALS 表模型中列宽单位一致的 xpath 断言
- flutter - 错误:这需要启用“不可为空”实验
- python - 在 Python 中更改函数名称
- ios - 如何覆盖目标的字符串本地化文件中的字符串
- scala - WebSocket 缺少用于自定义数据类型的隐式消息流转换器 2.6
- php - Symfony 4 - 分页过滤器搜索问题
- python - 导入tensorflow.contrib.slim时如何解决UnicodeDecodeError
- android - 在一个地方更改 ID 会更改 Android XML 文件中其他地方的 ID
- c++ - 以下程序的意外输出