0

関数を状態として 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;
    }
}
4

1 に答える 1

0

セバスチャン・ダニエルが言ったように、そうしないでください。Redux FAQ によると、これはタイム トラベル デバッグのようなものを壊し、Redux の使用を意図したものではありません

代わりに考えられるのは、必要なフィルタリングの何らかの説明を保存することです。関連する例として、私の現在のプロトタイプでは、表示したいダイアログ クラスのルックアップ テーブルを作成しています。表示する必要がある場合は、ダイアログ タイプの名前を含むアクションをディスパッチします。私のダイアログ マネージャ クラスは、その「dialogType」フィールドを状態から引き出し、それを使用して正しいダイアログ コンポーネント クラスを検索し、それをレンダリングします。

もう 1 つの問題は、そもそもなぜ実際に関数を自分の状態に格納したいのかということです。あなたがそこで何をしようとしているのかはわかりますが、実際にそれで達成したいことはわかりません.

于 2016-05-18T22:30:53.760 に答える