当前位置: 首页 > 知识库问答 >
问题:

使用异步路由时向组件传递道具

袁耀
2023-03-14

我正在使用react样板文件,它在route.js中使用异步调用来提供组件。

在“/”路径中加载的组件定义为:

const SPoints=({actions,loading,error,regions,selectedRegion,region,regionLoading})=

组件中填充了这些值,例如region.name等。

路由代码为:


const getRootComponent = (nextState, cb) => {
  import('containers/App')
    .then(loadModule(cb))
    .catch(errorLoading);
}

export default function createRoutes(store) {
  // create reusable async injectors using getAsyncInjectors factory
  const { injectReducer, injectSagas } = getAsyncInjectors(store);

  return [{
    path: '/',
    name: 'SPoints',
    getComponent(nextState, cb) {
      getRootComponent(nextState, cb);
    },
    indexRoute: {
      getComponent(nextState, cb) {
        const importModules = Promise.all([
          import('containers/SPoints/reducer'),
          import('containers/SPoints/sagas'),
          import('containers/SPoints'),
        ]);

        const renderRoute = loadModule(cb);

        importModules.then(([reducer, sagas, component]) => {
          injectReducer('spoints', reducer.default);
          injectSagas(sagas.default);

          renderRoute(component);
        });

        importModules.catch(errorLoading);
      }
    }
  }

SPoint收到的道具是如何传递给它的?我在代码中没有看到任何明显的组件是如何得到它的道具的...

嗯。我现在认为正在导入的sagas.js正在redux商店中设置值,但我仍然不知道这些道具是如何传递的。


共有1个答案

曾新
2023-03-14

简而言之,来自react-redux的连接高阶组件正在提供来自redux商店的那些道具。

然而,路由器指向的组件将被注入一些来自反应路由器的道具。

下面是一个react-boiler板的示例容器。请注意底部带有mapStateToPropsmapDispatchToProps的连接函数,它做的正是它听起来像的事情:将状态映射到正在连接[到redux的商店]的组件上的道具,并将操作分派到道具。

https://github.com/react-boilerplate/react-boilerplate/blob/master/app/containers/HomePage/index.js#L121

export function mapDispatchToProps(dispatch) {
  return {
    onChangeUsername: (evt) => dispatch(changeUsername(evt.target.value)),
    onSubmitForm: (evt) => {
      if (evt !== undefined && evt.preventDefault) evt.preventDefault();
      dispatch(loadRepos());
    },
  };
}

const mapStateToProps = createStructuredSelector({
  repos: makeSelectRepos(),
  username: makeSelectUsername(),
  loading: makeSelectLoading(),
  error: makeSelectError(),
});

// Wrap the component to inject dispatch and state into it
export default connect(mapStateToProps, mapDispatchToProps)(HomePage);
 类似资料:
  • 我试图使用react router将props从app.jsx传递到某个路由组件,但出现以下错误

  • 我需要通过使用路由器的组件道具。这是我的代码: 如您所见,我验证了我要传递给登录组件的道具。 当我记录道具时,未经验证的道具不存在。我做错了什么?我怎样才能正确地通过道具?我跟踪了文档和其他讨论。据我所知,这应该是可行的。react router和react router dom的版本为4.0.0

  • 我对反应和试图理解如何传递道具很陌生。 首先,我设置了一个Navlink组件,该组件包含子类别属性: ,,都是从json文件中获取的,所以这部分是可以的。 每条路线的定义如下: 所以它呈现一个名为

  • 我使用的反应与反应路由器的项目,我需要传递道具的子组件从路由。 我有这样的设置: App.js Home.js 问题是主组件总是给出错误“未定义”。我无法理解如何解决这个问题。如果我从Home.js中移除道具,组件渲染就很好。但当我尝试访问道具时,会出现错误。

  • 我将如何让 调用的函数将数据传递给相应的路由组件? 在这种情况下,beforeEnter 的目的是确认有效的持有者令牌以 cookie 的形式存在。 目前,我让< code>beforeEnter在< code>/verify/auth上点击aws api网关,然后组件加载并调用< code>/list/repos上的dynamodb。问题是,两条路线都受到内置AWS api gatewayV2

  • 英文原文: http://emberjs.com/guides/routing/asynchronous-routing/ 本节内容主要介绍一些路由的高级特性,以及路由是如何处理应用中的一些复杂异步逻辑的。 承诺简介 Ember在路由中处理异步逻辑的方案主要依赖于承诺(Promise)。简单地说,承诺就是代表了最后的值的对象。承诺可以被履行(成功的获得了最后的结果)也可以被拒绝(没有获得最后的结果