根据docs的状态,react应用程序必须是可序列化的.
假设我有一个待办事项应用程序.
据我所知,我可以在某个地方声明函数,并执行rename(Todo)
次,或者通过props this.props.rename(Todo)
将该函数传递给组件.
我在某处申报.rename()
有两个问题:
我觉得这很傻.对象应该知道可以对其执行什么操作,以及以何种方式执行.不是吗?
我错过了什么?
根据docs的状态,react应用程序必须是可序列化的.
假设我有一个待办事项应用程序.
据我所知,我可以在某个地方声明函数,并执行rename(Todo)
次,或者通过props this.props.rename(Todo)
将该函数传递给组件.
我在某处申报.rename()
有两个问题:
我觉得这很傻.对象应该知道可以对其执行什么操作,以及以何种方式执行.不是吗?
我错过了什么?
在Redux中,您实际上没有自定义模型.您的状态应该是普通对象(或不可变记录).他们不需要任何自定义方法.
而不是把方法放在模型上(例如TodoItem.rename
),你需要write reducers that handle actions.这就是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 basics tutorial,因为你似乎对Redux应用程序的 struct 有错误的 idea .