[英]Minimize parameters for createSelector in reselect Reactjs
我在我的 ReactJs 代码中使用了重新选择。 这是代码片段。 由于文件大,我从中省略了不必要的代码。
import { createSelector } from 'reselect';
const todoSelector = state => state.todo.todos;
const searchTermSelector = state => state.todo.searchTerm;
const searchViewSelector = state => state.todo.userView
export const filteredTodos = createSelector(
[todoSelector, searchTermSelector, searchViewSelector],
(todos, searchTerm, searchView) => {
return todos.filter(todo => todo.title.match(new RegExp(searchTerm, 'i')));
}
);
您可以注意到createSelector
的参数。 我们知道createSelector
需要 2 个 arguments:输入选择器数组作为第一个参数,function 作为第二个参数
在这种情况下,输入选择器数组为 3。( [todoSelector, searchTermSelector, searchViewSelector]
)
但在我的实际代码中,输入选择器数组是 9。由于声纳问题,我需要将计数从 9 减少到小于 4。
如何最小化输入选择器数组并使其按预期工作。 我在网上搜索了很多,但我没有找到任何与之相关的 ifno。 请问有什么建议吗?
如果您想减少每个选择器函数的 arguments 的数量,您可以将逻辑分成多个部分并使用 createSelector function 结果作为另一个 createSelector function 的参数。 像这样的东西:
const todoSelector = state => state.todo.todos;
const searchTermSelector = state => state.todo.searchTerm;
const searchViewSelector = state => state.todo.userView
export const filteredTodosByTerm = createSelector(
[todoSelector, searchTermSelector],
(todos, searchTerm) => {
return todos.filter(todo => todo.title.match(new RegExp(searchTerm, 'i')));
}
);
export const filteredTodosByView = createSelector(
[filteredTodosByTerm, searchViewSelector],
(todos, searchView) => {
return todos.filter(todo => todo.title.match(new RegExp(searchView, 'i')));
}
);
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.