【问题标题】:Not getting data from nodejs server for the first time in React在 React 中第一次没有从 nodejs 服务器获取数据
【发布时间】:2022-02-06 13:57:53
【问题描述】:

我正在尝试从Nodejs 服务器获取图像。每当我第一次刷新页面或打开它时,数据都没有存储在 React state 变量中,因此状态值给出了 null,因此我无法在客户端显示图像.

这是我的 React 代码:

const Images = ()=>{
    const [images,setImages] = useState([]);
    var res=[];
    useEffect(()=>{
        function fetchData(){
            instance.get('/Index/getphoto')
            .then(res=>{
                console.log(res);
                setImages(res.data);
                console.log(images);
            })
            
        }
        fetchData();
    },[])
    return(
        <>
            {
                images.map((item)=>{
                    return(
                        <div key={item.id}>
                        <img src={`http://localhost:3000/${item.img}`} alt="anything" />
                        </div>
                    )
                })
                
            }
        </>
    );
}

在上面的fetchData 函数中,我从端点获取所有数据,但是当我尝试使用setImages(res.data) 将这些数据存储在images 状态变量中时,它没有存储在那里,我得到了在我的控制台中出现以下结果:

【问题讨论】:

  • 我不完全理解这个问题。状态不是持久的——当应用程序关闭或重新加载时它会被清除——所以在应用程序加载的那一刻,状态只有提供的初始值,在这种情况下是[]。这是你的问题,还是 fetchData 函数没有成功?您可以提供任何错误消息吗?
  • 是的,fetchData 函数没有成功。我没有收到任何错误,只是 console.log(images) 给了我一个空数组,即使 console.log(res) 显示了我想要的所有数据,但它没有以图像状态存储。
  • 如果console.log(res) 显示数据,则fetchData 成功。听起来setImages 不起作用。您能否使用这些详细信息以及获取结果更新您的问题?
  • 我更新了问题。请看一下,请纠正我。
  • set function fetchData out of useEffect

标签: node.js reactjs


【解决方案1】:

在 React 中设置状态是 asynchronous,因此设置状态后,您将无法立即在下一行看到您的 images

useEffect(() => {
   function fetchData(){
       instance.get('/Index/getphoto')
       .then(res=>{
           console.log(res);
           setImages(res.data);
       })
    }
    fetchData();
}, [])
// Moved this log outside useEffect
console.log(images);

关于您收到的警告与unique keys 相关,是因为您使用的是map 而不是images,因此您需要为map 中的每个元素分配唯一键。
在您的情况下,您使用的是item.id,因此只需确保所有图像的 id 都是唯一的,否则它将无法按预期运行。

 <div key={item.id}>

参考资料 -

  1. ReactJS : What is the best way to give keys in array element
  2. Why calling react setState method doesn't mutate the state immediately?
  3. Correct path for img on React.js
  4. React won't load local images

【讨论】:

  • 是的,它奏效了。太感谢了。你能告诉我这条线是否正确吗?http://localhost:3000/${item.img}} alt="anything" />
  • 是的,它奏效了。太感谢了。你能告诉我,如果下面的行是正确的? http://localhost:3000/${item.img}} alt="anything" />。我将带有 jpg 或 jpeg 扩展名的图像名称存储在 MongoDB 中,并尝试从那里访问它。但是图像没有在客户端加载。
  • 将图像名称存储在数据库中是可以的,但您的实际图像存储在哪里?
  • 我已经用一些参考资料更新了我的答案,看看它会帮助你理解和解决你的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-10
  • 1970-01-01
  • 1970-01-01
  • 2021-04-12
  • 1970-01-01
  • 1970-01-01
  • 2021-12-12
相关资源
最近更新 更多