react- express:获取数据时,当用户连接时,可以在重新加载上工作
我已经使用nodejs/express/mongodb的react部署了我的第一个应用程序,但是我正在通过一个无法找到任何解决方案的错误运行,所以我来这里找到了一些帮助。
这是一个应用:
用户连接后,他可以访问数据,但是如果重新加载页面,则获取不再工作。
这是获取发生的代码:
import './App.css';
import "./index.css"
import React, {useState, useEffect, useRef} from 'react'
import {BrowserRouter as Router, Routes, Route} from 'react-router-dom'
import Register from './components/Register';
import Login from './components/Login'
import Home from './pages/Home';
import Auth from './pages/Auth';
import Movie from './pages/Movie'
import NotFound from './pages/Notfound';
import FavoritesMovies from './pages/Favorites';
import UserContextProvider from './contexts/UserContext';
import RequireAuth from './contexts/RequireAuth';
function App() {
const defaultUser = {name:"Stranger", email: "[email protected]"}
const [moviesList, setMoviesList] = useState([])
const [initialML, setInitialML] = useState([])
const [userInfo, setUserInfo] = useState(defaultUser)
// console.log(userInfo.name)
useEffect( () => {getMovies()}, [])
function getMovies() {
fetch('/movies')
.then(response => response.json())
.then(data => {
const movies= data.movies
setMoviesList(movies)
setInitialML(movies)
})
.catch(err => console.log(err))
}
return (
<div className="App">
<UserContextProvider user={{userInfo, setUserInfo}}>
<Router>
<main>
<Routes>
<Route path="/" element={<Home moviesList={moviesList} setMoviesList={setMoviesList} initialMovieList={initialML}/>}/>
<Route path="/auth/*" element={<Auth />} >
<Route path="login" element={<Login/>} />
<Route path="register" element={<Register/>} />
<Route path="logout" element={<Register/>} />
{/* <Route path="*" element={<NotFound />}/> */}
</Route>
<Route path="movies/:movieId" element={<Movie moviesList={moviesList} setMoviesList={setMoviesList} />} />
<Route path="favorites" element={
<RequireAuth>
<FavoritesMovies />
</RequireAuth>} />
<Route path="*" element={<NotFound />}/>
</Routes>
</main>
</Router>
</UserContextProvider>
</div>
);
}
export default App;
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
通常,您的代码可以像这样修改,粗略:
app
中删除fetch/电影,然后将其放入home
- 这将确保在时确保使用ferseffect/fetch触发器/
路由被击中。并且是保持分离和井井有条的好习惯。应用程序组件
home组件
,我不确定您使用的是哪个版本,但是如果不是v6,则可以检查react.router。 ://v5.reactrouter.com/web/api/switch“ rel =“ nofollow noreferrer”> https://v5.reactrouter.com/web/api/switch
In general your code can be modified like this, roughy:
App
and place it insideHome
- this would make sure useEffect/fetch triggers when/
route is hit. And is good practice to keep things separated and well organized.App component
Home component
And i am not sure which version you are using but if it is not v6, more on React.Router could be checked- https://v5.reactrouter.com/web/api/Switch and
exact
https://dev.to/danhjoo7/using-a-switch-component-in-react-router-d2k在此行或任何地方都有
MovieList
和initialml
尝试执行:您的提取请求是异步的,因此需要一些时间,但是在此之前已经呈现了汇编,然后才看起来很可能看起来很可能数据没有被获取。
On this line or where ever there is
moviesList
andinitialML
try doing:Your fetch request is async so it takes some time but the compenent is already rendered before that thats probably it looks data is not being fetched.