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

React router v4渲染组件内部元素

欧阳安晏
2023-03-14

我使用的是React Router v4的最新版本,我试图在PageWrapdiv中呈现我的页面组件Home/About,但我遇到的问题是,如果我将路由添加到我的头中,它将切换路由,但它们将显示Home/About组件作为头的一部分,而不是我希望它们出现的位置。

如果我将路由放入PageWrap中,则路由器不工作,但不会在控制台上抛出任何错误。

如何在PageBodydiv中显示和切换组件?

网页链接

app.js

import React from 'react'
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom'
import styled from 'styled-components'
import Header from './Header'

import Home from './pages/Home'
import About from './pages/About'


const Wrapper = styled.div`
  display:flex;
  min-height:100vh;
 flex:1;
 background:#eee;
`
const PageWrap = styled.div`
 margin:0 auto;
 min-width:1400px;
 background: #000;
`

class App extends React.Component { // eslint-disable-line react/prefer-
stateless-function
  render() {
    return (
  <div>
    <Header />
    <Wrapper>
      <PageWrap>
        <Router>
          <Switch>
            <Route exact path="/login" component={Home} />
            <Route exact path="/frontpage" component={About} />
            <Route exact path="/logout" render={() => (<div>logout</div>)} />
          </Switch>
        </Router>
      </PageWrap>
    </Wrapper>
  </div>
)
}
}
export default App

Header.js

import React from 'react'
import { BrowserRouter as Router, Route, Link } from 'react-router-dom'
import styled from 'styled-components'
import Home from '../pages/Home'
import About from '../pages/About'
import Topics from '../pages/Topics'

const Wrapper = styled.div`
  width:100%;
  height:100px;
  background:papayawhip;
`

 class Header extends React.Component { // eslint-disable-line react/prefer-
 stateless-function
  render() {
   return (
   <Router>
    <Wrapper>
      <li><Link to="/">Home</Link></li>
      <li><Link to="/about">About</Link></li>
      <li><Link to="/topics">Topics</Link></li>
      <Route exact path="/" component={Home} />
      <Route exact path="/about" component={About} />
      <Route path="/topics" component={Topics} />
    </Wrapper>
  </Router>
  )
  }
}


export default Header

home.js

const Home = () => (<div>Home</div>)

关于.js

const About = () => (<div>About</div>)

共有2个答案

陈增
2023-03-14

在某些情况下,当您有“十条或数百条”或路由时,您可能希望委派路由。

您可以看到这里所指的子路由

谭煜
2023-03-14

您应该只有一个

所以你在App组件中的渲染方法应该是这样的。

render() {
  return (
    <Router>
      <div>
        <Header />
        <Wrapper>
          <PageWrap>
            <Switch>
              <Route exact path="/login" component={Home} />
              <Route exact path="/frontpage" component={About} />
              <Route exact path="/logout" render={() => (<div>logout</div>)} />
            </Switch>
          </PageWrap>
        </Wrapper>
      </div>
    </Router>)
}

并确保删除

更新的WebpackBin:https://www.webpackbin.com/bins/-KiLrUNoJVxxLhL8UWx1

 类似资料:
  • 问题内容: 我被困住了。我在单独的文件上有几个单独的组件。如果我在main.jsx中渲染它们,如下所示: 一切正常,但我想知道这是否是一个好习惯?也许可以做一些像只有一个ReactDom.render这样的事情: 我尝试了各种LandingPageBox变量,以某种方式包括了其他两个组件,但没有运气。它们有时在页面外渲染,依此类推。我认为应该看起来像这样: 但是此代码仅呈现PageTop和Page

  • 问题内容: 我需要能够在文本区域(即,,,)中呈现一些HTML标记,但是textareas仅将其内容解释为文本。有没有一种简单的方法,而无需依赖外部库/插件(我正在使用jQuery)?如果没有,您知道我可以使用任何jQuery插件吗? 问题答案: 这与不可能。您正在寻找的是一个内容可编辑的 div,这很容易做到:

  • 问题内容: 我需要能够在文本区域(即)中呈现一些HTML标记,但是textareas仅将其内容解释为文本。有没有一种简单的方法,而无需依赖外部库/插件(我正在使用jQuery)?如果没有,您知道我可以使用任何jQuery插件吗? 问题答案: 这与不可能。您正在寻找的是一个内容可编辑的 div,这很容易做到: jsFiddle

  • 问题内容: 我尝试运行RichFaces4应用,但组件未渲染。例如,当我尝试这个演示:演示时,我得到如下信息: 我的代码与演示中的代码几乎相同。我刚刚添加了表单标签,因为它对此有所抱怨。 问题答案: 这就是Crome开发人员工具告诉我的内容 http://img571.imageshack.us/i/rfnotdefined.jpg (未捕获的ReferenceError:未定义RichFaces

  • This group contains all Components that have to do with rendering in-game and user interface elements. Lighting and special effects are also included in this group. 这个组包括在游戏中渲染和界面元素的所有组件。光照和特定效果也包含在这个

  • Sprite 组件参考 Label 组件参考 Mask 组件参考 Graphics 组件参考 RichText 组件参考 UIStaticBatch 组件参考