【问题标题】:where do we get the props in render method in React.js我们在哪里获得 React.js 中 render 方法中的 props
【发布时间】:2021-08-20 15:24:33
【问题描述】:

我已经将一个组件传递给子元素,我很困惑的一件事是渲染方法获取 props 作为参数,然后我们将它们作为 props 传递给其他 element。我们在哪里以及如何在 render 方法的参数中获取这些道具。检查代码,特别是其中使用的渲染方法和道具,谢谢

代码如下:

return (
    <div>
      <Route
        {...rest}
        render={(props) =>
          localStorage.getItem("authToken") ? (
            <Component {...props} />
          ) : (
            <Redirect to="/" />
          )
        }
      />
    </div>

这是来自父元素的代码

 <Privateroute exact path="/signup"   component={Register} />

【问题讨论】:

  • 我不确定你的问题
  • @moshfiqrony 嗨,谢谢你的时间,在渲染方法中你可以看到道具,然后这些道具被传递给 。我的问题是我们从哪里得到这些道具?如果你有时间我可以分享 youtube 教程链接,你可以得到更清晰的想法。

标签: reactjs react-router mern


【解决方案1】:

如果你想首先考虑道具,你必须了解函数中的参数。

在函数中你可以调用带参数的函数。参数是可选的,如果你传递它将传递值,如果你不传递它将为空。有时,如果您在函数定义中为参数使用默认值,它将保留该值。

现在让我们来看看道具。 props 与参数相同。但在这种情况下。 React 为你做这件事,它是动态的。无论你将通过组件传递什么 props 并在默认情况下做出反应,都会传递一些额外的 props。

所以如果你使用任何全局组件,props 会由 react 自动生成。如historylocation等,如果使用react-router-dom浏览器路由器,则传递或创建。

最后。一言以蔽之,props 和参数一样,react 也是动态创建圆顶的。

【讨论】:

  • 对了,props 在这里有什么值/属性 render={props => ( localStorage.getItem("authToken") ?
  • 那些道具是来自Route 组件的一些道具。 Route 组件为额外的 props 完成所有工作并传递它。
  • 它自动添加的道具是historylocation和其他一些回调
  • 额外的 props 从根窗口对象生成,帮助我们重定向、解析查询字符串等
  • 所以这里的道具 render={props => ( localStorage.getItem("authToken") ? 只包含诸如历史、位置等之类的东西,它们是react 自动生成的吧?
【解决方案2】:

以下是工作示例:

Privateroute.js 组件

import React from 'react';
import { Route, Redirect } from 'react-router-dom';

const Privateroute = ({component: Component, ...rest}) => {
    return (
        <Route {...rest} render={props => (
            localStorage.getItem("authToken") ?
                <Component {...props} />
            : <Redirect to="/signup" />
        )} />
    );
};

export default Privateroute;

App.js

import React, { Component } from 'react';
import { BrowserRouter, Switch } from 'react-router-dom';
import Privateroute from './components/PrivateRoute';

class App extends Component {

  render() {
    return (
      <BrowserRouter>
        <Switch>
          <Privateroute component={Register} path="/signup" exact />
        </Switch>
      </BrowserRouter>
    );
  }
}

export default App;

【讨论】:

  • 兄弟,我只对一部分感到困惑 {props => ( localStorage.getItem("authToken") ? 我们有除了组件之外没有通过任何其他的
  • 当你创建一个组件时,你可以在它的参数中传递props为const Home = (props) =&gt; ( &lt;div&gt;Hello&lt;/div&gt; )。以同样的方式,您可以传入一个在位置匹配时调用的函数,而不是使用组件属性为您创建一个新的 React 元素。 render prop 函数可以访问与组件 render prop 相同的所有路由 props(匹配、位置和历史记录)。
  • 非常感谢,现在我更清楚地理解了这种渲染方法,再次感谢您的时间:)
猜你喜欢
  • 2017-01-06
  • 2018-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-01
  • 1970-01-01
相关资源
最近更新 更多