我有一个包含各种类型博客帖子的reducer。我正在使用select来获取我需要的部分数据,但每次状态更改时重新选择都会重新计算所有选择器。
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分支也会发生变化,因为我正在返回一个新副本。因此,我将编写的任何选择器最终会在每次过滤器更改时重新计算所有内容。
创建过滤状态选择器的标准做法是什么?
答案 0 :(得分:0)
请告诉我您的选择器代码部分。
在上面的代码中,filter
已更改,但blogPosts
和commentPosts
未更改,因此不会进行不必要的重新计算。