Eu estava seguindo um tutorial:
https://www.youtube.com/watch?v=R4AhvYORZRY&t
e me deparei com um problema, onde <LinkContainer />
me deram esse erro, excluí-lo, corrigi-lo, adicionar o roteador ao aplicativo ou cabeçalho apenas me disse que já era um roteador.
O código para o LinkContainer
, encontrado aqui:
https://www.npmjs.com/package/react-router-bootstrap?activeTab=code
var LinkContainer = function LinkContainer(_ref) {
var children = _ref.children,
onClick = _ref.onClick,
_ref$replace = _ref.replace,
replace = _ref$replace === void 0 ? false : _ref$replace,
to = _ref.to,
state = _ref.state,
_ref$activeClassName = _ref.activeClassName,
activeClassName = _ref$activeClassName === void 0 ? 'active' : _ref$activeClassName,
className = _ref.className,
activeStyle = _ref.activeStyle,
style = _ref.style,
getIsActive = _ref.isActive,
props = _objectWithoutProperties(_ref, _excluded);
var path = _typeof(to) === 'object' ? to.pathname || '' : to;
var navigate = (0,react_router_dom__WEBPACK_IMPORTED_MODULE_1__.useNavigate)();
var href = (0,react_router_dom__WEBPACK_IMPORTED_MODULE_1__.useHref)(typeof to === 'string' ? {
pathname: to
} : to);
principal.jsx
import { StrictMode } from "react";
import { createRoot } from "react-dom/client";
import {
createBrowserRouter,
createRoutesFromElements,
Route,
RouterProvider,
} from "react-router-dom";
import "bootstrap/dist/css/bootstrap.min.css";
import "./index.css";
import App from "./App.jsx";
import HomeScreen from "./screens/HomeScreen.jsx";
const router = createBrowserRouter(
createRoutesFromElements(
<Route path="/" element={<App />}>
<Route index={true} path="/" element={<HomeScreen />} />
</Route>
)
);
createRoot(document.getElementById("root")).render(
<StrictMode>
<RouterProvider router={router} />
</StrictMode>
);
aplicativo.jsx
import Header from "./components/Header";
import { Container } from "react-bootstrap";
import { Outlet } from "react-router-dom";
const App = () => {
return (
<>
<Header />
<Container className="my-1">
<Outlet />
</Container>
</>
);
};
export default App;
Cabeçalho.jsx
import { Navbar, Nav, Container } from "react-bootstrap";
import { FaChild, FaFileUpload, FaExchangeAlt } from "react-icons/fa";
import { LinkContainer } from "react-router-bootstrap";
const Header = () => {
return (
<header>
<Navbar bg="dark" variant="dark" expand="lg" collapseOnSelect>
<Container>
<LinkContainer to="/">
<Navbar.Brand>MY APP</Navbar.Brand>
</LinkContainer>
<Navbar.Toggle aria-controls="basic-navbar-nav" />
<Navbar.Collapse id="basic-navbar-nav">
<Nav className="ms-auto">
<LinkContainer to="/viewKids">
<Nav.Link>
<FaChild /> Ver Niños
</Nav.Link>
</LinkContainer>
<LinkContainer to="/uploadKids">
<Nav.Link>
<FaFileUpload /> Subir Niño
</Nav.Link>
</LinkContainer>
<LinkContainer to="/updateKids">
<Nav.Link>
<FaExchangeAlt /> Actualizar Niño
</Nav.Link>
</LinkContainer>
</Nav>
</Navbar.Collapse>
</Container>
</Navbar>
</header>
);
};
export default Header;
Tentei várias coisas, reinstalar dependências, reiniciar o aplicativo, mas a única coisa que parece funcionar é apenas excluir o contêiner de links. Estou disposto a aceitar uma alternativa tão boa quanto o contêiner de links, mas adoraria obter uma resposta sobre o que estou fazendo errado. Se precisar de mais informações, estou disposto a compartilhá-las também.
Emitir
Parece que o problema que você tem é causado pelo uso do React-Router-DOM versão 7, que alterou significativamente sua estrutura e organização de código interno. O principal problema é que
RouterProvider
não é exportado porreact-router-dom
, e sim pelareact-router
biblioteca raiz. Isso significa que o roteador não está instanciado corretamente, embora não esteja exatamente claro por que isso não é o que aparece no problema/problema antes de atingir o link problema surgido ao usar oLinkContainer
componente.Sugestão de solução
Você deve instalar e importar os componentes do React-Router a partir de
react-router
agora.( Se necessário ) desinstale completamente todas as versões instaladas atualmente de
react-router-dom
:npm uninstall -S react-router-dom
Instale
react-router@7
para sua interface de usuário ereact-router-dom@7
parareact-bootstrap
dependência:npm install -S react-router@7 react-router-dom@7
Importar de
react-router
:Para detalhes específicos sobre migração/atualização do React-Router v6 para v7, consulte:
Alternativa
Você também pode, é claro, reverter para o React-Router v6, se quiser.
( Se necessário ) desinstale completamente todas as versões instaladas atualmente de
react-router-dom
:npm uninstall -S react-router-dom
Instalar
react-router-dom@6
para sua interface de usuário ereact-bootstrap
dependência:npm install -S react-router-dom@
Mantenha as declarações de importação atuais como estão