Как использовать React Router для замены компонента в методе рендеринга? - PullRequest
2 голосов
/ 29 октября 2019

Я хочу использовать React-Router, чтобы изменить <Frontpage /> Компонент с <Question /> Компонентом после нажатия на «Los geht's».

Пожалуйста, игнорируйте метод handleClick, это был один из моих первыхпытается без реакции-маршрутизатора.

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;

Все, что я получаю, - это новый Компонент под моей "страницей приветствия", но он должен сделать всю страницу новой и показать "вторую страницу".

Ответы [ 3 ]

3 голосов
/ 29 октября 2019

Вы можете достичь этого следующим образом:

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>        
    );
  }
2 голосов
/ 29 октября 2019

Вы можете отобразить <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>        
    );
1 голос
/ 29 октября 2019

Перестройка моего ответа теперь, когда желаемый результат немного более ясен. Это должно сделать то, что вы ищете.

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>
      );
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...