javascript - 尝试将自定义属性传递到React Router(使用v4)

标签 javascript reactjs react-router

我的 App.js 中有以下渲染方法:

  render() {
    return (
      <LocaleProvider locale={enUS}>
        <Router history={history}>
          <div>
            <Header />
            <Switch>
              <Route exact path={home} component={requireAuth(Groups)} />
              <Route exact path={groups} component={requireAuth(Groups)} />
              <Route path={addcard} component={requireAuth(AddCard)} />
              <Route path={db} component={requireAuth(DbTbl)} />
              <Route component={NoMatch} />
            </Switch>
          </div>
        </Router>
      </LocaleProvider>
    );
  };

我想将自定义属性传递给前 2 条路由({home} 和 {groups}),因此我尝试执行以下操作:

 render() {
    const groups1 = () => <Groups studyState={this.toggleStudyState}/>;

    return (
      <LocaleProvider locale={enUS}>
        <Router history={history}>
          <div>
            <Header />
            <Switch>
              <Route exact path={home} render={requireAuth(groups1)} />
              <Route exact path={groups} render={requireAuth(groups1)} />
              <Route path={addcard} component={requireAuth(AddCard)} />
              <Route path={db} component={requireAuth(DbTbl)} />
              <Route component={NoMatch} />
            </Switch>
          </div>
        </Router>
      </LocaleProvider>
    );
  };

但是我从 react 路由器收到此错误消息:

connectAdvanced.js:3 Uncaught TypeError: Cannot call a class as a function

所以我怀疑 React Router 不喜欢带有 render= 属性的高阶组件语法。如何将 StudyState 属性传递到与前两个标签一起使用的 Groups 组件中?

最佳答案

render属性必须有一个函数传递给它。您正在上课。

写这样的东西:

<Route exact path={home} render={(routerProps) => {
  const AuthGroups = requireAuth(Groups);
  return <AuthGroups studyState={this.toggleStudyState}/>;
}} />

由于我不知道 requireAuth 是如何工作的,所以我不知道 studyState 属性是否会正确传递给 Group 组件。但我想它会的。

<小时/>

现在有一个更清晰的代码(如果上述解决方案有效):

renderAuthGroups(routerProps) {
    const AuthGroups = requireAuth(Groups);
    return <AuthGroups studyState={this.toggleStudyState}/>;
}
render() {
    return (
        <LocaleProvider locale={enUS}>
          <Router history={history}>
              <div>
                  <Header />
                  <Switch>
                      <Route exact path={home} render={this.renderAuthGroups.bind(this)} />
                      <Route exact path={groups} render={this.renderAuthGroups.bind(this)} />
                      <Route path={addcard} component={requireAuth(AddCard)} />
                      <Route path={db} component={requireAuth(DbTbl)} />
                      <Route component={NoMatch} />
                  </Switch>
              </div>
          </Router>
      </LocaleProvider>
    );
};

关于javascript - 尝试将自定义属性传递到React Router(使用v4),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46136264/

相关文章:

javascript - jQuery 中的异步日志记录

javascript - 函数未在 componentDidMount () 中加载

javascript - 根据 Redux 状态更改组件的布局

javascript - React Router 重定向速度很慢

reactjs - React 路由器导航不起作用

javascript - 无法使用服务器端渲染访问 DOM - react 0.14.1、react-dom 0.14.1 和 react-router 1.0.0-rc3

javascript - 页面刷新后 OnChange 选项保持不变

javascript - 如何消除 Sequelize 中相同模型之间的多个关联之间的歧义

javascript - 缺少架构错误 : Schema hasn't been registered for model "Post"

reactjs - 将排毒与 FaSTLane 集成