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

react-router如何通过prop将参数传递给其他组件?

印季
2023-03-14
问题内容

到目前为止,我对如何通过参数将属性从一个组件传递到另一组件的了解程度如下

//开始:我的知识范围

假设存在一些topic在A.jsx中调用的状态变量。我想将此传递给B.jsx,所以我执行以下操作

B = require('./B.jsx')
getInitialState: function() {return {topic: "Weather"}}
<B params = {this.state.topic}>

然后在B.jsx中,我可以做类似

module.exports = React.createClass({
render: function() {
   return <div><h2>Today's topic is {this.props.params}!</h2></div>
}
})

当被调用时将呈现“今天的主题是天气!”

//结束:我的知识范围

现在,我正在阅读带有以下代码片段的react-router教程

topic.jsx:

module.exports = React.createClass({
  render: function() {
    return <div><h2>I am a topic with ID {this.props.params.id}</h2></div>
    }
  })

route.jsx:

var Topic = require('./components/topic');
module.exports = (
  <Router history={new HashHistory}>
    <Route path="/" component={Main}>
      <Route path = "topics/:id" component={Topic}></Route>
    </Route>

  </Router>
)

header.jsx:

  renderTopics: function() {
    return this.state.topics.map(function(topic) {
      return <li key = {topic.id} onClick={this.handleItemClick}>
        <Link to={"topics/" + topic.id}>{topic.name}</Link>
      </li>
    })
  }

其中this.state.topics是通过Reflux从imgur API中提取的主题列表。

我的问题是
:通过哪种机制params传递给propstopic.jsx?在代码中的任何地方都看不到上一节中“我的知识范围”即表达的习惯用语。<Topic params = {this.state.topics} />route.jsx或header.jsx中都没有。在这里链接到完整的仓库。React-router文档说,参数是“
从原始URL的路径名中解析出来的 ”。这没有引起我的共鸣。


问题答案:

那是一个关于react-router内部的问题。

react-router是一个React组件本身,它用于props将所有路由信息递归传递给子组件。但是,这是的实现细节,react- router我知道这可能会造成混淆,因此请继续阅读以获取更多细节。

您的示例中的路由声明为:

<Router history={new HashHistory}>
  <Route path="/" component={Main}>
    <Route path = "topics/:id" component={Topic}></Route>
  </Route>
</Router>

因此,基本上,React-
Router将遍历路由声明中的每个组件(Main,Topic),并在使用React.createElement方法创建组件时将以下属性“传递”到每个组件。这是传递给每个组件的所有道具:

const props = {
   history,
   location,
   params,
   route,
   routeParams,
   routes
}

通过react-router使用各种机制(例如,使用正则表达式从URL字符串中提取数据)的不同部分来计算道具值。

React.createElement方法本身允许react-router创建一个元素并传递上面的道具。方法的签名:

ReactElement createElement(
  string/ReactClass type,
  [object props],
  [children ...]
)

因此,基本上,内部实现中的调用如下所示:

this.createElement(components[key], props)

这意味着react- router使用上面定义的道具来初始化每个元素(主要,主题等),从而解释了如何this.props.paramsTopic组件本身中进行访问,它被传递了react- router



 类似资料:
  • 问题内容: 我正在尝试访问DetailsPage组件中的 ID ,但无法访问它。我试过了 将参数传递给DetailsPage,但徒劳。 所以有什么想法如何将ID传递给DetailsPage吗? 问题答案: 如果要将props传递到路线内的组件,最简单的方法是利用,如下所示: 您可以使用以下内容访问道具: 将需要通过原路线的道具,否则你将只能得到内。

  • 问题内容: 我需要使用路由器将道具传递到组件。这是我的代码: 如您所见,isAuthenticated我想传递给Login组件的道具。 当我登录道具时, isAuthenticated 道具不存在。我做错了什么?如何正确通过道具?我关注了文档以及其他讨论。据我了解,它应该可以工作。的版本 做出反应路由器 和 反应路由器- DOM 是 4.0.0 问题答案: 像这样传递它: 它应该在“登录组件”中可

  • 问题内容: 我在Django应用程序中有一个用户注册表格,该表格收集用户尝试注册时的其他数据,例如地址,城市,国家/地区,电话号码等。 该数据通过信号保存在“帐户”模型类中。用户创建过程如下所示: 在这里,当用户发布表单时将调用该函数,在该函数下,我可以获得POST数据,我想要的是将该数据传递给方法,以便其填充模型中的字段。 现在,我确实看到了在数据库中创建的对象,但是除用户字段之外的所有字段均为

  • 问题内容: 该文档讨论了使用numba的作为的参数。我需要带有附加参数的相同内容。 我基本上是想做这样的事情: 但是,它不起作用,因为应该是/并且不能将它们转换为。我收到以下错误消息: 我没有找到有关如何从Numba中提取值的任何信息。在C语言中,应该类似于—在Numba中可以做同样的事情吗? 问题答案: 1.通过传递额外的参数 该文件说: 如果用户希望改善集成性能,则可以使用以下签名之一: 该是

  • 是否可以使用UI将项目数组传递到swagger块中的单个参数中?我在ruby\rails应用程序中使用它。请求类型是GET。 我有一个接受许多参数的搜索 API。所有这些都是单一值,但一个设施除外。它接受一个项目数组,并且可以使用类似于下面显示的 URL 进行调用(下面的示例显示了传递的两个值 1 和 2)。 我的参数是这样设置的: 当我在swagger中传递数组作为参数时,EG[1]会生成以下U

  • 在React Router v4中,如何使用传递参数?