为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 useEffect 在每次渲染后执行?

为什么 useEffect 在每次渲染后执行?

Cats萌萌 2021-12-12 10:06:30
我的效果挂钩有问题。我只希望它渲染一次。如果我传递album.length 或一个空数组,它返回一个空对象。如果专辑作为依赖项添加,则效果呈现为无限循环。任何帮助表示赞赏。const [album, setAlbum] = React.useState(initialState)const {state} = React.useContext(AuthContext);async function fetchData(){ try{  const res =await axios.get('http://localhost:5000/api/albums/all')  const {data}= await res;  setAlbum({...data,albums:res.data})  console.log(album)  }  catch(err){  console.log(err);  }} useEffect(() => {fetchData();}, []);_______________________________________________________componentDidMount(){  axios.get('http://localhost:5000/api/albums/all').then(res=>{    let albums=res.data.map((album)=>{      return(        <div key={album._id}>       //display the album          </div>         </div>        </div>       )       })this.setState({albums:albums});}) }
查看完整描述

1 回答

?
慕运维8079593

TA贡献1876条经验 获得超5个赞

const res =await axios.get('http://localhost:5000/api/albums/all')

const {data}= await res;

setAlbum({...data,albums:res.data})

你能解释一下吗?为什么要等待资源,为什么要传播数据并将其添加为专辑?


你可以编写自己的钩子。您还应该fetchApi在 useEffect 钩子中声明该函数,这就是它始终重新渲染的原因。


让我们用你的代码做一个自定义的钩子


import axios from 'axios';

import React, { useEffect, useState } from 'react';


function useAlbums() {

  const [albums, setAlbums] = useState([]);

  useEffect(() => {

    const fetchData = async () => {

      try {

        const { data } = await axios.get(

          'http://localhost:5000/api/albums/all',

        );

        setAlbums(data);

        console.log(albums);

      } catch (err) {

        console.log(err);

      }

    };

    fetchData();

  }, [albums]);


  return [albums, setAlbums];

}


const Component = () => {

  // use it in component

  const [albums] = useAlbums();


  return (

    <>

      {albums.map(({ _id }) => (

        <div key={_id}>{'add more content here'}</div>

      ))}

    </>

  );

};


const [albums, setAlbums] = useAlbums();

希望这可以帮助!


查看完整回答
反对 回复 2021-12-12
  • 1 回答
  • 0 关注
  • 404 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号