【问题标题】:React- Router not show componentReact-路由器不显示组件
【发布时间】:2018-01-20 10:05:54
【问题描述】:

我已经阅读了所有相关条目。但是,我的问题仍然存在。 我有以下 App.js:

import React, { Component } from 'react';
import ReactDOM from 'react-dom';
import {NavLink} from 'react-router-dom';
import { BrowserRouter, Route } from 'react-router-dom';
import About_Screen from './screen/About_Screen.js';

class App extends Component {

 constructor(props){
 super(props)
 this.state = {};
 }

render(){
 return(

  <div className="app">     
    <main role="main">
    <Jumbotron fluid>
      <h1>Welcome</h1>
       <NavLink to="/About_Screen">About</NavLink>
        <Panel collapsible expanded={this.state.open}>
         wes anderson
        </Panel>
   </Jumbotron>
<Grid>
<Row>
<Col xs={6} md={2}>
  <Thumbnail src={require("./watch.png")}>
    <h5>Thumbnail label</h5>
      <Button onClick={ ()=> this.setState({ open: !this.state.open })}>
        ?
      </Button>
      <Panel collapsible expanded={this.state.open}>
      Smart
      </Panel>
      <p>
       <Checkbox inline></Checkbox>
      </p>
   </Thumbnail>
 </Col>
 ....
   )
  }
}

ReactDOM.render(
<BrowserRouter>
 <App>  
  <Route exact path="/" component={About_Screen}></Route>
  <Route path="/About_Screen" component ={About_Screen}> </Route>
 </App>    
</BrowserRouter>, 
document.getElementById('root')
);

我尝试通过 jumbotron 中的 NavLink 链接到我的 About_Screen.js。这也显示在 URL (http://localhost:8080 / About_Screen) 中。不幸的是,路由不起作用。 这是 About_Screen.js:

import React, {Component} from 'react'; 从'react-router'导入{Link};

 class About_Screen extends React.Component{

  render (){
   return(
    <div>  
     <h1>SCREEN 1 DATA</h1>
    </div>  
   );
  }
 }
 export default About_Screen;

我的错误在哪里?我链接路由错误吗? 我的数据结构如下:

  • 应用程序
      • App.js
      • index.html
        • 屏幕
        • About_Screen.js

非常感谢您的帮助!

【问题讨论】:

  • 你有{ this.props.children },在你的App组件渲染方法中的任何地方吗?
  • 没有。我应该在哪里添加这个?
  • 无论你想在哪里渲染你的About_Screen
  • 当我进入 About_Screen 时,我想显示(或多或少)同一页面。所以应该渲染everythink。
  • 您想在哪里查看更改?您的 App 类实际上正在渲染,并且您内部的某个地方(可能)想要渲染您的路由组件(SCREEN 1 DATA),这就是您需要将 { this.props.children } 放入其中的地方。

标签: javascript reactjs react-router


【解决方案1】:

如上所述,您不会在 App 类中打印任何内容。您需要在其中插入{this.props.children}。例如:

class App extends Component {

 constructor(props){
 super(props)
 this.state = {};
}

render(){
 return(

  <div className="app">     
    <main role="main">
    <Jumbotron fluid>
      <h1>Welcome</h1>
       <NavLink to="/About_Screen">About</NavLink>
        <Panel collapsible expanded={this.state.open}>
         // this is the code to print About_Screen
         {this.props.children}
        </Panel>
   </Jumbotron>
<Grid>
<Row>
<Col xs={6} md={2}>
  <Thumbnail src={require("./watch.png")}>
    <h5>Thumbnail label</h5>
      <Button onClick={ ()=> this.setState({ open: !this.state.open })}>
        ?
      </Button>
      <Panel collapsible expanded={this.state.open}>
      Smart
      </Panel>
      <p>
       <Checkbox inline></Checkbox>
      </p>
   </Thumbnail>
 </Col>
 ....
   )
  }
}

以上代码将在可折叠面板内显示&lt;h1&gt;SCREEN 1 DATA&lt;/h1&gt;

编辑: 如果要重新加载页面,则将此部分修改为:

<BrowserRouter>
  <div>
  <Route exact path="/" component={App} />
  <Route path="/About_Screen" component ={About_Screen} />
  </div>
</BrowserRouter>

&lt;App&gt; 只会在您转到"/" 时显示。当您单击该页面上的 NavLink 时,该页面将重新加载到 "/About_Screen"

【讨论】:

  • 你好 Win Chiu,谢谢你的帮助。如果我以这种方式集成 {this.props.children},

    SCREEN 1 DATA

    “仅”信息将添加到现有页面。但是,我想完全重新加载(通过 NavLink 单击)页面(使用 About_Screen.js 上的信息)或用 About_Screen 信息替换起始页面中的信息。我不想添加任何信息。
  • 如果这样做,我会收到以下错误消息:未捕获错误: 可能只有一个子元素。我将 ... 插入到 ReactDOM.render();
  • 可以分享一下修改后的版本吗?仅限 BrowserRouter 部分。
  • 好的。我有它。我必须在 之间添加一个
    。谢谢Win Chiu。如果我有我的最终解决方案,我会发布它。希望我不会再遇到任何问题:)
  • 嗯,对不起..我的错误。忘记用
    包裹 。请再次检查我的代码。
【解决方案2】:

应该链接到另一个文件夹吗?文件在同一个文件夹吗?

 <NavLink to="/Screen/About_Screen">About</NavLink>

【讨论】:

  • 是的。我想从现有页面链接到 About_Screen.js 页面
猜你喜欢
相关资源
最近更新 更多
热门标签