我有一个选择器:
const someSelector = createSelector(
getUserIdsSelector,
(ids) => ids.map((id) => yetAnotherSelector(store, id),
); // ^^^^^ (yetAnotherSelector expects 2 args)
Run Code Online (Sandbox Code Playgroud)
这yetAnotherSelector是另一个选择器,它接受用户id - id并返回一些数据.
但是,既然如此createSelector,我就无法访问它(我不希望它作为一个函数,因为memoization不会工作).
有办法在某种程度上访问商店createSelector吗?或者有没有其他方法来处理它?
我有一个功能:
const someFunc = (store, id) => {
const data = userSelector(store, id);
// ^^^^^^^^^^^^ global selector
return data.map((user) => extendUserDataSelector(store, user));
// ^^^^^^^^^^^^^^^^^^^^ selector
}
Run Code Online (Sandbox Code Playgroud)
这样的功能正在杀死我的应用程序,导致所有内容重新渲染并让我疯狂.帮助赞赏.
我做了一些基本的自定义memoization:
import { isEqual } from 'lodash';
const memoizer = {};
const someFunc = (store, id) => { …Run Code Online (Sandbox Code Playgroud) First of all, I have already gone through:
And have learnt a lot, but still can't figure out how to work out my case.
I am doing a music player and I have normalized my store to look like this:
{
albums : {
album1 : {
name : "...",
songs : …Run Code Online (Sandbox Code Playgroud) 我不能传递变量ownProps从mapStateToProps到选择。我的选择器:
export const nameSelector = createSelector(
[
state => state.element.get('name')
],
(name) => !name.trim()
);
const mapStateToProps = (state, ownProps) => ({
disabledAfterSave: nameSelector(state)
});
Run Code Online (Sandbox Code Playgroud)
我需要一个选择器:
export const nameSelector = createSelector(
[
state => state.element.get('name')
],
(name, ownProps) => !name.trim() && ownProps.showMessage
);
const mapStateToProps = (state, ownProps) => ({
disabledAfterSave: nameSelector(state, ownProps)
});
Run Code Online (Sandbox Code Playgroud)
但现在我收到一个错误:ReferenceError: ownProps is not defined.
当我尝试像下面这样传递它时:
export const nameSelector = (ownProps) => createSelector(
[
state => state.element.get('name')
],
(name) => …Run Code Online (Sandbox Code Playgroud)