Нарушение Инварианта: Вы не должны использовать <Switch>вне <Router> - PullRequest
0 голосов
/ 29 мая 2018

У меня есть проблема, которую я не знаю, как решить, я получаю эту ошибку при запуске теста npm Invariant Violation: You should not use <Switch> outside a <Router>.В чем может быть проблема и как я могу ее решить?Тест, который я запускаю, является стандартным app.test.js, который поставляется с реакцией

class App extends Component {
  render() {
    return (
      <div className = 'app'>
        <nav>
          <ul>
            <li><Link exact activeClassName="current" to='/'>Home</Link></li>
            <li><Link exact activeClassName="current" to='/TicTacToe'>TicTacToe</Link></li>
            <li><Link exact activeClassName="current" to='/NumGame'>Quick Maths</Link></li>
            <li><Link exact activeClassName="current" to='/HighScore'>Highscore</Link></li>
            <li><Link exact activeClassName="current" to='/Profile'>Profile</Link></li>
            <li><Link exact activeClassName="current" to='/Login'>Sign out</Link></li>
          </ul>
        </nav>
        <Switch>
          <Route exact path='/' component={Home}></Route>
          <Route path='/TicTacToe' component={TicTacToe}></Route>
          <Route path='/NumGame' component={NumberGame}></Route>
          <Route path='/HighScore' component={HighScore}></Route>
          <Route path='/Profile' component={Profile}></Route>
          <Route path='/Login' component={SignOut1}></Route>
        </Switch>
      </div>
    );
  }
};

Ответы [ 2 ]

0 голосов
/ 30 декабря 2018

Всегда помещайте BrowserRouter в компоненты навигации, следуйте примеру:

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

var Componente1 = () => (<div>Componente 1</div>)
var Componente2 = () => (<div>Componente 2</div>)
var Componente3 = () =>  (<div>Componente 3</div>)

class Rotas extends Component {
    render() {

        return (
                <Switch>
                    <Route exact path='/' component={Componente1}></Route>
                    <Route exact path='/comp2' component={Componente2}></Route>
                    <Route exact path='/comp3' component={Componente3}></Route>
                </Switch>
        )
    }
}


class Navegacao extends Component {
    render() {
        return (

                <ul>
                    <li>
                        <NavLink to="/">Comp1</NavLink>
                    </li>
                    <li>
                        <NavLink exact  to="/comp2">Comp2</NavLink>
                    </li>
                    <li>
                        <NavLink exact to="/comp3">Comp3</NavLink>
                    </li>
                </ul>
        )
    }
}

class App extends Component {
    render() {
        return (
            <BrowserRouter>
                <div>
                    <Navegacao />
                    <Rotas />
                </div>
            </BrowserRouter>
        )
    }
}

render(<App/>, document.getElementById("root"))

Примечание: BrowserRouter принимает только один дочерний элемент.

0 голосов
/ 29 мая 2018

Ошибка правильная.Вам нужно обернуть Switch BrowserRouter или другими альтернативами, такими как HashRouter, MemoryRouter.Это связано с тем, что BrowserRouter и альтернативы являются общим низкоуровневым интерфейсом для всех компонентов маршрутизатора, и они используют API-интерфейс HTML 5 history, и вам это необходимо для перемещения назад и вперед между маршрутами.

Попробуй сделать это скорее

import { BrowserRouter, Switch, Route } from 'react-router-dom';

А затем заверни все так

<BrowserRouter>
 <Switch>
  //your routes here
 </Switch>
</BrowserRouter>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...