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

渲染道具-反应路线

米楚青
2023-03-14
const Home = () => <div>Home</div>

const App = () => {
  const someVariable = true;

  return (
    <Switch>
      {/* these are good */}
      <Route exact path='/' component={Home} />
      <Route
        path='/about'
        render={(props) => <About {...props}  />}
      />
    </Switch>
  )
}

const About = (props) => {
  return (
    <div>
      About   
    </div>
  )
} 

代码示例中,在

<Route
        path='/about'
        render={(props) => <About {...props}  />}
      />

当react遇到路由组件(react路由器的一部分)的渲染道具时,它会传递什么道具?

鉴于https://reactjs.org/docs/render-props.html ,render prop是一个函数prop,组件使用它来知道要渲染什么,是传递给props的值,该props埋在react router中的Route声明中

共有3个答案

上官季
2023-03-14

当在render方法中传递道具时,您将获得默认道具,就像使用组件而不是使用render道具一样,render道具隐式地获得所有这些道具的匹配、位置、历史和静态上下文。你需要提供道具作为一个参数,否则渲染方法不会把道具传递给孩子,因为它会认为它是未定义的。

下面是react router中渲染道具的工作示例:https://codesandbox.io/s/72k8xz669j

张昊穹
2023-03-14

我们使用带有渲染道具的路线作为,

<Route path = "/about" component={About} />

或者,

<Route path = "/about" render= { (props) => <About {...props} } />

第二个与第一个不同的是,在第二种情况下,About组件可以访问通过路线到达的道具。

比如说,有一个外形组件,

<Route path="/admin/profile"
       render={ props => (
              <Profile tabs= {"valuePassed"} {...props}  />  
        )}
 />

现在在Profile组件中,我们可以访问所有道具,

this.props.tabs在基于类的组件中提供“valuepasss”,而props.tabs用于功能组件。

希望这有帮助。

胥博文
2023-03-14

道具由路由组件传递到渲染道具方法。您可以在React路由器源代码中看到这一点。路由组件传递的道具具有匹配、位置、历史记录和静态上下文。如果要使用父组件中的道具(在父组件中定义render props方法),则可以忽略props参数。

渲染={()=

然后,您将从包含路由的组件中获取道具。

您提供的示例没有多大意义,因为它复制了您通过在路由上使用“组件”道具获得的行为。

https://github.com/ReactTraining/react-router/blob/master/packages/react-router/modules/Route.js#L120

 类似资料:
  • I my app.js我已将路线定义为: 在我的中,我有一个链接: 但问题是,当我在aboue path中设置prop'确切={true}时,找不到这个路径 当我没有在上面的路径中设置exact={true}时,在同一页面上呈现路径组件及其下方的路径组件

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

  • 问题内容: 我有一个应用程序,需要动态设置元素的高度(让我们说“ app-content”)。它获取应用程序“ chrome”的高度,然后减去它的高度,然后将“ app- content”的高度设置为在这些限制内适合100%。这对于香草JS,jQuery或Backbone视图来说非常简单,但是我正在努力弄清楚在React中执行此操作的正确过程是什么? 以下是一个示例组件。我希望能够将的高度设置为窗

  • 问题内容: 我已经实现了一个Modal组件,该组件在屏幕上显示一个模态对话框。通常,模态将有条件地显示。我可以通过两种方法在render函数中执行此操作: 在Modal组件中,我使用this.props.show为其自身添加了一个不同的类。如果为假,它将添加display:none以隐藏模式。 另一种方式是这样的: 这用于确定是否在渲染中添加Modal。 我想找出的是: 这两种方式有何不同? 其中

  • 所以就像标题所说的,我的应用程序的主页因为某种原因渲染了两次,我不知道为什么。从我的浏览器路由器,我最初调用一个JS文件,从那里我调用我的HomePage组件和React路由器,但然后我的页面渲染两次,我不知道为什么。 我的浏览器路由器(index.js): 然后pp.js被称为: 然后我的主页组件(index.jsx): 和路线。js: 但是我的页面是这样渲染的: 我真的很困惑,所以任何建议都会

  • 我创建了一个需要在应用程序的多个部分中单独显示的组件-(在我的导航内部、主页和单独的路由上)。因此,我在此组件中的一个use中进行了所有操作调度(用于读取数据的api调用)效果: 如您所见,此效果应该只运行一次(当组件装载时)。 在其他任何地方,我都不会在此组件内部或外部调度这些特定操作。 该组件在3个位置渲染(导航内部、其自身的时间路径和主组件内部)。我可以在导航内部同时在时间上渲染它,没有问题