当前位置: 首页 > 面试题库 >

将道具传递到React Router子路线

谷梁存
2023-03-14
问题内容

我无法克服React Router的问题。场景是我需要让子级路由从状态父级组件和路由传递一组道具。
我想做的就是通过childRouteApropsA,然后通过childRouteBpropsB。但是,我能弄清楚如何做到这一点的唯一方法是同时通过RouteHandler两者propsApropsB这意味着每条子路线都会获得每条子道具,而不论其是否相关。目前,这并不是一个阻塞问题,但是我可以看到有一段时间我将使用两个相同的组件,这意味着propA上的键将被propB的键覆盖。

# routes
routes = (
  <Route name='filter' handler={ Parent } >
    <Route name='price' handler={ Child1 } />
    <Route name='time' handler={ Child2 } />
  </Route>
)

# Parent component
render: ->
  <div>
    <RouteHandler {...@allProps()} />
  </div>

timeProps: ->
  foo: 'bar'

priceProps: ->
  baz: 'qux'

# assign = require 'object-assign'
allProps: ->
  assign {}, timeProps(), priceProps()

这实际上以我期望的方式工作。当我链接到/filters/time我得到的Child2组件呈现。当我去的时候/filters/price我得到的Child1组件呈现。问题是,做这个过程,Child1并且Child2都通过了allProps(),即使他们只需要价格和时间的道具,分别。如果这两个组件具有相同的道具名称,这通常会成为一个问题,通常来说,用不必要的道具膨胀组件(因为在我的实际案例中有两个以上的孩子)并不是一个好习惯。
因此,总而言之
,有没有一种方法可以RouteHandler在我转到时间路线(filters/time)时传递timeProps,并且仅RouteHandler在我转到价格路线(filters/price)时将priceProps
传递至,并避免将所有道具传递给所有子路线?


问题答案:

我遇到了类似的问题,发现您可以访问路线组件中的Route穿过设置的道具this.props.route。知道了这一点,我就这样组织了我的组件:

index.js

React.render((
  <Router history={new HashHistory()}>
    <Route component={App}>
        <Route
          path="/hello"
          name="hello"
          component={views.HelloView}
          fruits={['orange', 'banana', 'grape']}
        />
    </Route>
  </Router>
), document.getElementById('app'));

App.js

class App extends React.Component {
  constructor(props) {
    super(props);
  }

  render() {
    return <div>{this.props.children}</div>;
  }
}

HelloView.js

class HelloView extends React.Component {
  constructor(props) {
    super(props);
  }

  render() {
    return <div>
      <ul>
        {this.props.route.fruits.map(fruit => 
          <li key={fruit}>{fruit}</li>
        )}
      </ul>
    </div>;
  }
}

这是使用react-router v1.0-beta3。希望这可以帮助!

好的,现在我对您的问题有了更好的了解,这是您可以尝试的方法。

由于您的孩子道具来自单亲,因此您的父组件(而不是react-router)应该是管理渲染哪个孩子的组件,以便您可以控制传递哪些道具。

您可以尝试更改路线以使用参数,然后在父组件中检查该参数以呈现适当的子组件。

路线

<Route name="filter" path="filter/:name" handler={Parent} />

父组件

render: function () {
  if (this.props.params.name === 'price') {
    return <Child1 {...this.getPriceProps()} />
  } else if (this.props.params.name === 'time') {
    return <Child2 {...this.getTimeProps()} />
  } else {
    // something else
  }
}


 类似资料:
  • 问题内容: 我正在尝试将现有的react-router 3.0.0应用程序迁移到4.0.0。在路由器内,我需要传递与其子代无关的其他非路由选择。 在早期版本的react- router中,有一些技巧性的方法可以实现此目的,本文对此进行了详细介绍。我个人最喜欢的是使用的这种方法,因为它可以确保复制所有的react-router道具: 到目前为止,我的新App组件如下所示: 在保留提供的路由器道具的同

  • 我尝试使用react路由器将道具传递给组件,如下所示: 我如何做到这一点,但与反应路由器,我如何在组件本身使用它? 我试过这个,但不起作用:

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

  • Home.js 一个bout.js 当路线改变时,有没有办法把道具从家里送到附近? 也许类似于将道具发送到子组件,例如:

  • 我在克服react路由器的问题时遇到困难。该场景是,我需要从状态父组件和路由向子路由传递一组道具 我想做的是传递its,传递its。然而,我能找到的唯一方法是通过这两个和,这意味着每个子路径都会获得每个子道具,无论其是否相关。目前这不是一个阻塞问题,但我可以看到,有一段时间我会使用同一组件的两个,这意味着propA上的键将被propB上的键覆盖。 这实际上是我所期望的方式。当我链接到我得到组件渲染