【发布时间】:2019-08-02 08:18:30
【问题描述】:
我有一个名为filterContactsByValue 的函数。它被柯里化并接受一个值和一个联系人列表,然后根据该值过滤列表并返回(新的)过滤列表。
由于列表通常很大(超过 10.000 个条目),网络应用程序应该在智能手机上运行并且过滤器会考虑许多值,我想优化计算资源。因此我使用useDebounce 来避免不必要的计算。
我也像这样使用useCallback来记忆filteredContacts的计算:
function FilteredContacts({contacts}) {
const [filterParam, setFilterParam] = useState('');
const [value] = useDebounce(filterParam, 800);
const filterContacts = filterContactsByValue(value.toLowerCase());
// Is this okay? ???? ...
const getFilteredContacts = useCallback(() => filterContacts(contacts), [
value
]);
return (
<div className="main">
<SearchBar
value={filterParam}
onChangeText={setFilterParam}
/>
// ... and then this? ????
<ContactList contacts={getFilteredContacts()} />
</div>
);
}
我想知道这是否可行,或者返回这样的值是否是不好的做法。如果不好,为什么以及如何改进?
编辑:
filterContactsByValue 函数:
import { any, filter, includes, map, pick, pipe, toLower, values } from 'ramda';
import { stringFields } from './config/constants';
const contactIncludesValue = value =>
pipe(
pick(stringFields),
map(toLower),
values,
any(includes(value))
);
const filterContactsByValue = pipe(
contactIncludesValue,
filter
);
【问题讨论】:
标签: reactjs react-hooks react-component