3

我有一个名为 Login 的组件,以及这些选择器:

const selectLogin = () => (state) => state.get('login');
const selectUser = () => createSelector(
  selectLogin(),
  (loginState) => loginState.get('user')
);

以下是“登录”组件的状态:

login: {
    user: {
      id: 206
    }
}

在另一个组件中,我想选择“用户”对象。

在我的文件顶部,我有

import { createStructuredSelector } from 'reselect';

import {
  selectLogin,
  selectUser
} from 'containers/Login/selectors';

const mapStateToProps = createStructuredSelector({
  login: selectLogin(),
  user: selectUser(),
});

当我使用“selectUser()”时,我得到“loginState.get 不是函数”。

如果我删除对“selectUser()”的所有引用,我可以访问 this.props.login.user。这对我有用,但我想知道为什么我不能从“登录”状态中选择。这些示例在选择器中使用相同的“子状态”约定,并且它们有效。有任何想法吗?

4

1 回答 1

1

这是另一条路线中的另一个组件吗?

您必须在每条路由中手动注入页面所需的 reducer 和 saga。

在 route.js 中, loadReducer 并将其注入页面,如下所示:

 {
            path: '/projects/add',
            ...
            getComponent(nextState, cb) {
                const importModules = Promise.all([
                    System.import('containers/Project/reducer'),
                    System.import('containers/Login/reducer')
                    ...
                ]);

                const renderRoute = loadModule(cb);

                importModules.then(([projectReducer, loginReducer ...]) => {
                    injectReducer('projects', projectReducer.default);
                injectReducer('login', projectReducer.default);
                    renderRoute(component);
                });

                importModules.catch(errorLoading);
            },
于 2017-02-17T06:58:44.587 回答