【发布时间】:2016-05-18 20:13:27
【问题描述】:
如何将函数保存为 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;
}
}
【问题讨论】:
-
你的减速器是什么样子的?在那里,您应该能够控制存储在商店中的内容。
-
不要在你的状态下保存函数,它们不可序列化,这违背了 redux 的整个原则。
-
@SebastienDaniel:好的,谢谢!
-
谢谢@SebastienDaniel,也不知道 :-)
标签: redux redux-thunk