さまざまなタイプのブログ投稿を保持するレデューサーがあります。select を使用して必要なデータの一部を取得していますが、状態が変わるたびに reselect がすべてのセレクターを再計算します。
initialstate = {
blogPosts: { byId: { 1: { id: 1, parent: null } }, ids: [1] },
commentPosts: { byId: { 2: { id: 2, parent: 1 } }, ids: [2] },
filter:{ selectedBlog: null }
};
const reducer = (state = initialstate, action) => {
if (action.type == 'filter') {
return object.assign(state, { filter: action.filter });
}
return state;
}
const Blogselector = state => state.posts.blogPosts
const Commentselector = state => state.posts.commentPosts
const getFilters = state => state.posts.filter;
私のコンポーネントでは、ブログ投稿を表示しているときに、設定したアクションをディスパッチしますfilter.selectedBlog = post.id
問題は、フィルターが変更されると、新しいコピーを返すときに状態の Posts ブランチ全体も変更されることです。したがって、私が作成するセレクターは、フィルターが変更されるたびにすべてを再計算することになります。
フィルタリング状態セレクターを作成するための標準的な方法は何ですか?