如何在redux存储中将函数保存为状态?
示例:
我将一个函数作为参数传递给redux-thunk调度程序函数,我想在我的redux存储中保存这个过滤器函数:
export const SET_FILTERED_USERS = 'SET_FILTERED_USERS';
export function setFilteredUsers(filter) {
return (dispatch, getState) => {
const allUsers = getState().users.allUsers;
const filteredUsers = allUsers.filter(filter);
dispatch({
type: SET_FILTERED_USERS,
data: {
filteredUsers,
filter
}
});
const activeUser = getState().users.activeUser;
if (activeUser && !_.isEmpty(filteredUsers) && filteredUsers.indexOf(activeUser._id) === -1) {
dispatch(setActiveUser(filteredUsers[0]));
} else {
dispatch(setActiveUser(allUsers[0]));
}
}
}
在ReduxDevTools中,我可以看到,"过滤"不会被分派并保存在商店中。有没有办法做到这一点?
由于
更新:我的缩短减速器:
import {
SET_FILTERED_USERS
} from '../actions/users';
import assign from 'object-assign';
export const initialState = {
filter: null,
filteredUsers: null
};
export default function (state = initialState, action = {}) {
const {data, type} = action;
switch (type) {
case SET_FILTERED_USERS:
return assign({}, state, {
filteredUsers: data.filteredUsers,
filter: data.filter
});
default:
return state;
}
}
答案 0 :(得分:0)
正如塞巴斯蒂安丹尼尔所说,不要这样做。根据Redux常见问题解答,这会破坏时间旅行调试,而不是Redux的使用方式:http://redux.js.org/docs/FAQ.html#organizing-state-non-serializable。
您可以考虑作为替代方案存储您想要的过滤的某种描述。作为一个相关的例子,在我当前的原型中,我正在创建一个我可能想要显示的对话框类的查找表,当我需要显示一个时,我会调度一个包含对话框类型名称的动作。我的对话管理器类将“dialogType”字段拉出状态,使用它来查找正确的对话框组件类,然后呈现它。
另一个问题,实际上,这就是为什么你真的想要首先在你的州存储一个功能。我看到你在尝试做什么,但实际上并不是你希望用它完成的事情。