#reactjs
Вопрос:
Я пытаюсь перейти по ссылке /login
, когда я нажимаю на фактическую ссылку, я вижу изменение URL-адреса в браузере, но Login
компонент не загружен:
// App.tsx
import React from 'react';
import {BrowserRouter as Router, Route} from 'react-router-dom';
import Header from './components/Header/Header';
import Login from './components/Login/Login';
const App = () => {
return (
<React.Fragment>
<Header />
<Router>
<Route path="/login" exact component={Login} />
</Router>
</React.Fragment>
);
};
export default App;
// Header.tsx
import React from 'react';
import {BrowserRouter, Link} from 'react-router-dom';
const Header = () => {
return (
<BrowserRouter>
<Link to="/login">login</Link>
</BrowserRouter>
);
};
export default Header;
И фактический компонент входа в систему:
// Login.tsx
import React from 'react';
// import {useHistory} from 'react-router-dom';
const Login = () => {
console.log('login component opened');
return (
<div>
Login
</div>
);
};
export default Login;
Когда я нажимаю ссылку в header
компоненте, ко мне переходят http://localhost:8080/login
, но компонент не загружается. Кроме того, если я обновлю эту страницу http://localhost:8080/login
, я получу сообщение:
Не удается ПОЛУЧИТЬ /войти в систему
Ответ №1:
Во-первых, Link
компонент должен быть внутри BrowserRouter
const App = () => {
return (
<React.Fragment>
<Router>
<Header />
<Route path="/login" exact component={Login} />
</Router>
</React.Fragment>
);
};
Кроме того, вам не нужно BrowserRouter
оборачивать Link
компонент:
import React from 'react';
import {BrowserRouter, Link} from 'react-router-dom';
const Header = () => {
return (
<Link to="/login">login</Link>
);
};
export default Header;
Комментарии:
1. Спасибо, чем я неправильно понял ошибку.
Uncaught Error: Invariant failed: You should not use <Link> outside a <Router>
думал, что мне нужно поместитьlink
внутренний компонент в маршрутизатор, но это компонент, который должен быть в маршрутизаторе.2. Да, я тоже нашел вашу проблему из-за этой ошибки.
Ответ №2:
Попробуйте это
const Header = () => {
return (
<BrowserRouter>
<Link to="/login">login</Link>
<Switch>
<Route exact path="/login">
<Login />
</Route>
</Switch>
</BrowserRouter>
);
};
Ответ №3:
Внутри App.tsx ваш импорт не должен выглядеть так:
import Login from './components/Login/login';
Вместо этого все должно быть так:
import Login from './components/Login/Login';
Вы использовали неправильное имя файла для компонента входа в систему. Первая буква должна быть прописной.
Комментарии:
1. Это была ошибка в форматировании вопроса, но не в том, что было причиной ошибки