如何使用 React Router 替换 render 方法中的组件?
How to use React Router to replace a Component in render method?
我想在单击 "Los geht's" 后使用 React-Router 将 <Frontpage />
组件更改为 <Question />
组件。
请忽略 handleClick 方法,这是我第一次尝试没有 react-router 的方法。
import React from 'react';
import './App.css';
import Frontpage from './Frontpage'
import Question from './components/Question'
import { BrowserRouter as Router, Switch, Route, Link } from 'react-router-dom';
class App extends React.Component {
constructor() {
super()
this.state = {
showComponent: false,
}
this.handeClick = this.handleClick.bind(this)
}
handleClick = () => {
this.setState({
showComponent: true })
// console.log("The button was clicked!")
// document.getElementById('page')
// document.getElementsByClassName('App-Header')
}
render() {
return (
<Router>
<div className="App">
<Frontpage />
<Link to={'/Question'} className="nav-link"> Los geht's </Link>
<Switch>
<Route path='/Question' component={Question} />
</Switch>
</div>
</Router>
);
}
}
export default App;
我得到的只是 "welcome page" 下的一个新组件,但它需要以新的方式呈现整个页面并显示 "second page".
你可以这样实现:
render() {
const SelectedComponent = someCondition ? Question : OtherComponent;
return (
<Router>
<div className="App">
<Frontpage />
<Link to={'/Question'} className="nav-link"> Los geht's </Link>
<Switch>
<Route path='/Question' component={SelectedComponent} />
</Switch>
</div>
</Router>
);
}
现在重组我的答案,期望的结果更加清晰了。这应该可以满足您的需求。
render() {
return (
<Router>
<div className="App">
<Link to="/">Frontpage</Link>
<Link to="/Question">Question</Link>
<Switch>
<Route path="/" exact component={Frontpage} />
<Route path="/Question" exact component={Question} />
</Switch>
</div>
</Router>
);
}
仅当路线与 /
完全匹配时,您才能显示 <Frontpage />
,如下所示:
render() {
return (
<Router>
<div className="App">
<Switch>
<Route path='/' exact >
<Frontpage />
<Link to={'/Question'} className="nav-link"> Los geht's </Link>
</Route>
<Route path='/Question' component={Question} />
</Switch>
</div>
</Router>
);
我想在单击 "Los geht's" 后使用 React-Router 将 <Frontpage />
组件更改为 <Question />
组件。
请忽略 handleClick 方法,这是我第一次尝试没有 react-router 的方法。
import React from 'react';
import './App.css';
import Frontpage from './Frontpage'
import Question from './components/Question'
import { BrowserRouter as Router, Switch, Route, Link } from 'react-router-dom';
class App extends React.Component {
constructor() {
super()
this.state = {
showComponent: false,
}
this.handeClick = this.handleClick.bind(this)
}
handleClick = () => {
this.setState({
showComponent: true })
// console.log("The button was clicked!")
// document.getElementById('page')
// document.getElementsByClassName('App-Header')
}
render() {
return (
<Router>
<div className="App">
<Frontpage />
<Link to={'/Question'} className="nav-link"> Los geht's </Link>
<Switch>
<Route path='/Question' component={Question} />
</Switch>
</div>
</Router>
);
}
}
export default App;
我得到的只是 "welcome page" 下的一个新组件,但它需要以新的方式呈现整个页面并显示 "second page".
你可以这样实现:
render() {
const SelectedComponent = someCondition ? Question : OtherComponent;
return (
<Router>
<div className="App">
<Frontpage />
<Link to={'/Question'} className="nav-link"> Los geht's </Link>
<Switch>
<Route path='/Question' component={SelectedComponent} />
</Switch>
</div>
</Router>
);
}
现在重组我的答案,期望的结果更加清晰了。这应该可以满足您的需求。
render() {
return (
<Router>
<div className="App">
<Link to="/">Frontpage</Link>
<Link to="/Question">Question</Link>
<Switch>
<Route path="/" exact component={Frontpage} />
<Route path="/Question" exact component={Question} />
</Switch>
</div>
</Router>
);
}
仅当路线与 /
完全匹配时,您才能显示 <Frontpage />
,如下所示:
render() {
return (
<Router>
<div className="App">
<Switch>
<Route path='/' exact >
<Frontpage />
<Link to={'/Question'} className="nav-link"> Los geht's </Link>
</Route>
<Route path='/Question' component={Question} />
</Switch>
</div>
</Router>
);