Kev*_*ump 46 javascript reactjs react-router-dom
我使用React Router v6,每次我在主文件中使用初始化进行身份验证时,都会显示此错误。我在互联网上找不到解决方案。我只想在有用户时渲染一些路线,但现在它不渲染任何内容。
认证导航器
import React, { useState, useEffect } from 'react';
import app from './firebase';
import { Router, Routes, Route } from 'react-router-dom';
import AuthStack from './stacks/AuthStack';
import AppStack from './stacks/AppStack';
import StaticStack from './stacks/StaticStack';
function AuthNavigator() {
const [initializing, setInitializing] = useState(true);
const [user, setUser] = useState(() => app.auth().currentUser);
useEffect(() => {
const unsubscribe = app.auth().onAuthStateChanged((user) => {
if (user) {
setUser(user);
} else {
setUser(null);
}
if (initializing) {
setInitializing(false);
}
});
// cleanup subscription
return unsubscribe;
}, []);
if (initializing) return 'Loading....';
return (
<Router>
<Routes>
<Route path="*" element={<StaticStack />} />
<Route path="auth/*" element={<AuthStack user={user} />} />
<Route path="app/*" element={<AppStack user={user} />} />
</Routes>
</Router>
);
}
export default AuthNavigator;Run Code Online (Sandbox Code Playgroud)
应用程序.js
import React from 'react';
import './App.css';
import AuthNavigator from './AuthNavigator';
import { Router } from 'react-router-dom';
function App() {
return (
<Router>
<AuthNavigator />
</Router>
);
}
export default App;Run Code Online (Sandbox Code Playgroud)
小智 35
我遇到过同样的问题。我的问题是由于以下原因。我有一个Header组件,其中包含NavLink,它是一个路由器组件。我将此Header组件放置在App组件内。我的应用程序组件是这样的:
function App() {
return(
<Header/>
<Router>
<Routes>
<Route path="/" element={<Homepage/>}/>
<Route path="/shop" element={<Shop/>}/>
<Route path="/signin" element={<Signin/>}/>
</Routes>
</Router>
)
}
Run Code Online (Sandbox Code Playgroud)
在上面的 App 组件中,我将 Header 组件放置在 Router 之外。由于在Header组件中我使用了NavLink,它是一个 Router 组件,导致了此错误。然后我将Header组件移动到 Router 组件中,然后它工作正常。最后我的代码如下所示:
function App() {
return(
<Router>
<Header/>
<Routes>
<Route path="/" element={<Homepage/>}/>
<Route path="/shop" element={<Shop/>}/>
<Route path="/signin" element={<Signin/>}/>
</Routes>
</Router>
)
}
Run Code Online (Sandbox Code Playgroud)
tit*_*300 30
已经封装在路由器中了吗?
如果您的组件已经包装在 Router 中。确保您是useLocation从而react-router-dom不是导入react-router。这对我有用。
小智 22
确保您的应用程序组件是这样index.js包装的BrowserRouter
const app = (
<Provider store={store}>
<BrowserRouter>
<App />
</BrowserRouter>
</Provider>
);
Run Code Online (Sandbox Code Playgroud)
小智 9
如果您在运行测试时遇到此问题,请不要忘记将 App 的导入也包装在 Router 中。我的粗略例子如下。
import { render, screen } from '@testing-library/react';
import { BrowserRouter } from 'react-router-dom';
import { App } from '../App';
test('renders Box', () => {
render(
<BrowserRouter>
<App />
</BrowserRouter>
);
const boxElement = screen.getByLabelText('box-outline');
expect(boxElement).toBeInTheDocument();
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
106232 次 |
| 最近记录: |