React react-router-dom 将 props 传递给组件

Posted

技术标签:

【中文标题】React react-router-dom 将 props 传递给组件【英文标题】:React react-router-dom pass props to component 【发布时间】:2017-09-14 02:37:50 【问题描述】:

我需要使用路由器将道具传递给组件。 这是我的代码:

import React,  Component, PropTypes  from 'react';
import  connect  from 'react-redux';
import AppBarTop from './appbar/AppBarTop';

import Login from '../pages/login/Login';
import BrowserRouter as Router, Route from 'react-router-dom';


class App extends Component 

    render() 

        const  isAuthenticated  = this.props;

        return (
            <Router>
                <div>
                    <AppBarTop isAuthenticated=isAuthenticated />
                    <div className="content">
                        <Route path="/login" isAuthenticated=isAuthenticated component=Login />
                    </div>
                </div>
            </Router>
        );
    

如您所见,isAuthenticated 我想传递给登录组件的道具。

class Login extends Component 

    constructor(props) 
        super(props);
        console.log(props);
    

    render() 
        return (
            <LoginForm />
        );
    



export default connect(null) (Login);

当我记录道具时,isAuthenticated 道具不存在。我做错了什么?我怎样才能正确传递道具? 我关注了文档和其他讨论。据我了解,它应该可以工作。 react-routerreact-router-dom 的版本是 4.0.0

【问题讨论】:

【参考方案1】:

这样传递:

<Route 
    path="/login" 
    render=(props) => <Login ...props isAuthenticated=isAuthenticated/> 
/>

登录组件中的this.props.isAuthenticated 应该可以使用它。

...props的原因:

如果我们不写这个,那么只有isAuthenticated 将被传递给登录组件,路由器传递给组件的所有其他值在登录组件中将不可用。当我们写...props 时,我们将所有值都传递给一个额外的值。

并且不要将component 与路由器一起使用,而是使用render 方法。

根据DOC:

Component:

当你使用组件(而不是渲染或子,下面) 路由器使用 React.createElement 从 给定的组件。这意味着如果您向 组件属性,您将在每次渲染时创建一个新组件。 这会导致现有组件卸载和新的 组件安装,而不是仅仅更新现有组件。 使用内联函数进行内联渲染时,请使用渲染。

Render:

这允许方便的内联渲染和包装,而无需 不需要的重新安装。

【讨论】:

由于道具的某种原因,我变得不确定 我有这样的:&lt;Route path="/ShowW" render=(props) =&gt; withRouter(&lt;ShowW ...props isAuthenticated=true/&gt;) /&gt; 我正在尝试在我的componentDidMount 中阅读它,就像这样console.log(this.props.isAuthenticated) 这种情况下不需要使用withRouter,直接写:&lt;Route path="/ShowW" render=(props) =&gt; &lt;ShowW ...props isAuthenticated=true /&gt;) /&gt;

以上是关于React react-router-dom 将 props 传递给组件的主要内容,如果未能解决你的问题,请参考以下文章

React react-router-dom 将 props 传递给组件

React-router-dom :是不是可以使用 Link 而不将用户路由到另一个页面?

如何添加将使用 react-router-dom 渲染组件的路由?

页面未呈现;在 react-router-dom 中使用受保护的路由将道具传递给孩子时

React-router-dom (v6) 和 Framer Motion (v4)

React redirect - react-router-dom 上的重定向组件