【问题标题】:How can I pass down variables into child component so that they work with React Router?如何将变量传递给子组件,以便它们与 React Router 一起使用?
【发布时间】:2019-05-26 23:41:15
【问题描述】:

我在设置允许跨组件使用 React Router 的基本 React 应用程序时遇到问题。当我在 App.js 中有以下代码 sn-ps 时,它似乎一切正常,但是,我无法将信息传递给子组件。

我尝试将 JSX 对象传递给组件,如下所示:

<Main component={Home} />

但这在尝试访问 Main 子组件中的属性时似乎不起作用。

App.js

import React from 'react';
import './App.css';
import { NavLink, Switch, Route } from 'react-router-dom';
import Navigation from './components/navigation.js';
import Main from './components/main.js';

const App = () => (
  <div className='app'>
    <h1>Portfolio Website</h1>
    <Navigation />
    <Main home={Home} about={About} />
   </div>
);


const Home = () => (
  <div className='home'>
    <h1>Welcome to my portfolio website</h1>
    <p> Feel free to browse around and learn more about me.</p>
  </div>
);

const About = () => (
  <div className='about'>
    <h1>About Me</h1>
  </div>
);


export default App;

Main.js

import React, { Component } from 'react';
import { NavLink, Switch, Route } from 'react-router-dom';

const Main = () => (
    <Switch>
        <Route exact path='/' component={this.props.Home}></Route>
        <Route exact path='/about' component={this.props.About}></Route>
    </Switch>
);

export default Main;

导航.js

import React from 'react';
import { NavLink } from 'react-router-dom';

const Navigation = () => (
  <nav>
    <ul>
      <li><NavLink exact activeClassName="current" to='/'>Home</NavLink></li>
      <li><NavLink exact activeClassName="current" to='/about'>About</NavLink></li>
    </ul>
  </nav>
);

export default Navigation;

我希望我能够使用创建的导航来加载组件内容,就像不在单独组件中时一样。不知道我哪里出错了?谢谢

【问题讨论】:

    标签: javascript reactjs ecmascript-6 react-router


    【解决方案1】:

    我根本不会做这样的事情。我认为您的主要组件是多余的。

    这将导致你的每一个组件都通过这个组件。

    路由器本身就是一个组件,所以为什么不如下:

    import { BrowserRouter, Switch, Route } from "react-router-dom";
    import Navigation from "./yournavigationcomponent"
    import Home from "./home"
    import About from "./about"
    
    class App extends Component {
      render() {
        return (
            <BrowserRouter>
                <div>
                    <Navigation />
                    <Switch>
                      <Route exact path='/' component={Home}/>
                      <Route path='/about' component={About}/>
                    </Switch>
                </div>
            </BrowserRouter>
    
        )
      }
    }
    

    【讨论】:

    • 谢谢,这是一个更好的方法
    猜你喜欢
    • 2015-07-12
    • 2017-03-18
    • 2022-11-26
    • 2015-08-04
    • 1970-01-01
    • 2017-05-30
    • 2017-09-14
    • 2021-12-08
    • 2018-02-04
    相关资源
    最近更新 更多