根据文档,反应应用程序的状态必须是可序列化的。那班呢?
假设我有一个ToDo应用。到目前为止,每个Todo
项目都具有name
,date
等属性。现在,我想对不可序列化的对象使用方法。即Todo.rename()
这将重命名待办事项,做了很多其他的东西。
据我了解,我可以在某处声明rename(Todo)
函数,然后通过props将该函数传递this.props.rename(Todo)
给组件。
我在声明.rename()
某个地方时遇到两个问题:1)在哪里?在减速器中?would be instance
在应用程序的化简器中很难找到所有方法。2)传递此功能。真?我应该通过所有更高级别的组件手动传递它吗?每当我有更多方法时,添加大量的样板即可将其传递下去?或者总是这样做,并希望我对一种类型的对象只有一种重命名方法。不Todo.rename()
Task.rename()
和Event.rename()
这对我来说似乎很愚蠢。对象应该知道可以做什么以及用哪种方式。是不是?
我在这里想念的是什么?
在Redux中,您实际上没有自定义模型。您的状态应该是普通对象(或不可变记录)。它们不应具有任何自定义方法。
而不是将方法放在模型上(例如TodoItem.rename
),您应该 编写处理动作的化简器 。这就是Redux的重点。
// Manages single todo item
function todoItem(state, action) {
switch (action.type) {
case 'ADD':
return { name: action.name, complete: false };
case 'RENAME':
return { ...state, name: action.name };
case 'TOGGLE_COMPLETE':
return { ...state, complete: !state.complete };
default:
return state;
}
}
// Manages a list of todo items
function todoItems(state = [], action) {
switch (action.type) {
case 'ADD':
return [...state, todoItem(undefined, action)];
case 'REMOVE':
return [
...state.slice(0, action.index),
...state.slice(action.index + 1)
];
case 'RENAME':
case 'TOGGLE_COMPLETE':
return [
...state.slice(0, action.index),
todoItem(state[action.index], action),
...state.slice(action.index + 1)
];
}
}
如果这仍然没有意义,请通读Redux基础教程,因为您似乎对Redux应用程序的结构有错误的认识。
问题内容: 我正在使用Redux进行状态管理。 如何将商店重置为初始状态? 例如,假设我有两个用户帐户(和)。 想象以下事件序列: 用户登录到该应用程序并执行某些操作,因此我们在存储中缓存了一些数据。 用户注销。 用户无需刷新浏览器即可登录应用程序。 此时,缓存的数据将与关联,我想对其进行清理。 当第一个用户注销时,如何将Redux存储重置为其初始状态? 问题答案: 一种方法是在应用程序中编写根减
对于我正在使用的插件,我必须具有如下状态: 如何在不设置其余访问权限的情况下设置hospital_id状态? 这似乎删除了一切,但hospital_id:
我的JavaScript对象的状态声明如下: 我有一个方法changeState(),它基本上执行以下操作: 然而,这将给我一个错误,即“setState”不是一个函数。如何从方法中更改此标志? 编辑:我不知道如何正确绑定。SOF一允许我就接受解决方案
问题内容: 鉴于我的初始还原状态为: 我需要做一个减速器来做到这一点: 我是使用Redux工作流程的新手,解决此问题的最佳方法是将roomList设置为immutable.js对象或编写一些代码以对我的状态对象进行深层克隆。 state.roomList还将从将来的功能中推送新数据。 总结/问题: 在状态深处进行此类更改时,在reducer中返回新状态对象的最佳方法是什么,还是应该更改Redux状
鉴于我的初始重复状态为: 我需要做一个减速器,它可以: 我不熟悉使用Redux工作流,解决这个问题的最好方法是将roomList设置为不可变的。js对象或编写一些代码来深度克隆我的状态对象。 此外state.room列表将从未来的功能中向其推送新数据。 总结/问题:当在状态中进行如此深入的更改时,在reducer中返回新状态对象的最佳方式是什么,还是应该更改Redux状态对象的结构? 我所做的最终
问题内容: 对于我正在使用的插件,我必须具有如下所示的状态: 我如何在不设置其余访问权限的情况下设置hospital_id的状态? 这似乎删除了除了hospital_id之外的所有内容: 问题答案: 您有几种选择: 借助ECMA6,您可以使用对象传播建议()创建具有更新属性的对象的副本。 您可以在对象()上使用本机分配功能 或为最短的版本和原子更新: 还有一个选项是更新插件: 我建议使用第一个。