useState 没有设置任何内容,如果我将该值添加到依赖项列表中,我的组件将触发无限重新渲染循环

编程入门 行业动态 更新时间:2024-10-04 17:21:54

useState 没有设置任何内容,如果我<a href=https://www.elefans.com/category/jswz/34/1722072.html style=将该值添加到依赖项列表中,我的组件将触发无限重新渲染循环"/>

useState 没有设置任何内容,如果我将该值添加到依赖项列表中,我的组件将触发无限重新渲染循环

我想设置一个从 Nodejs 获得的电影数组,该部分工作正常,因为响应正常,但是当我使用 useState 在我的组件中设置数组时,它好像没有触发重新渲染。对不起,如果我的英语不完美,我来自阿根廷,但我找不到任何对我的语言有帮助的文章。

收藏夹组件显示登录用户的收藏夹电影

import React, { useEffect, useState } from "react";
import axios from "axios";
import Modal from "../Modal";

const Favorites = ({user, favMovies}) =>{
    const [myList,setMyList] = useState(favMovies);
    const [favsList,setFavsList] = useState([]);

    const getData = async() =>{
        const response = await axios.post('/api/favs',{favMovies:myList});
        const data = response.data.favsList;
        console.log(data);
        setFavsList(data);
    }

    useEffect(()=>{
        setMyList(favMovies);
        if(myList){
            getData();
        }
    },[])

}

export default Favorites;

App 组件有路由器,如您所见,将 favMovies 作为 prop 发送到 Favorites 组件,这个名为 favMovies 的数组是一个 Id 数组,我通过它逐一获取用户的电影

function App() {
  const [user,setUser] = useState({});
  const [favsList,setFavsList] = useState([]);

  useEffect(()=>{
    const loggedinUser = localStorage.getItem('user');
    if(loggedinUser){
      setUser(JSON.parse(loggedinUser));
      console.log(user);
    }
  },[])

  return (
    <Router>
      <Navbar {...user} setUser={setUser}/>
      <Routes>
        <Route exact path='/' element={<ListMovies url={'/api'}/>} />
        <Route path='/popular' element={<ListMovies url={'/api/popular'} />} /> 
        <Route path='/movie/:id' element={<InfoMovie {...user}/>} />
        <Route path='/contact' element={<Modal msg='Acirca de nos'/>} />
        <Route path='/login' element={<Login setUser={setUser}/>} />
        <Route path='/register' element={<Register/>}/>
        <Route path='/favs' element={<Favorites user={user} favMovies={user.favMovies}/>}/>
        <Route path='*' element={<Modal msg='No hubo coincidencias de ruta'/>} />
      </Routes>
    </Router>
  );
}

export default App;   

如果有人可以帮助我或者已经解决了这个问题,我将非常感激

回答如下:

可能的解决方案:

1.将 favMovies 作为 props 传递给 Favorites 组件而不是将其存储为组件的状态更合适。当组件的 props 改变时,React 会自动重新渲染组件。因此,可以去掉myList状态,直接在getData函数中使用favMovies

2.在useEffect hook中,添加favMovies作为依赖。这样,只要 favMovies 道具发生变化,效果就会运行。

3.在 App 组件中,确保正确设置用户状态并将 user.favMovies 作为 favMovies 属性传递给 Favorites 组件:

 const Favorites = ({ user, favMovies }) => {
      const [favsList, setFavsList] = useState([]);
    
      const getData = async () => {
        const response = await axios.post("/api/favs", { favMovies: favMovies });
        const data = response.data.favsList;
        console.log(data);
        setFavsList(data);
      };
    
      useEffect(() => {
        if (favMovies) {
          getData();
        }
      }, [favMovies]);
    
    
    export default Favorites;

更多推荐

useState 没有设置任何内容,如果我将该值添加到依赖项列表中,我的组件将触发无限重新渲染循环

本文发布于:2024-05-30 18:28:42,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1770791.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:将该   组件   内容   列表中   useState

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!