Reactjs 如何修复useEffect的依赖项数组中存在的警告错误

Reactjs 如何修复useEffect的依赖项数组中存在的警告错误,reactjs,react-hooks,use-effect,Reactjs,React Hooks,Use Effect,我想解决项目中的所有警告,但我不知道应该在依赖数组中包含哪些依赖项。下面我分享代码: import React, { useState, useEffect } from 'react'; import { Redirect } from 'react-router-dom'; import Layout from '../components/Layout'; import { getPicture, getAlbums, updatePicture } from './ApiAdmin';

我想解决项目中的所有警告,但我不知道应该在依赖数组中包含哪些依赖项。下面我分享代码:

import React, { useState, useEffect } from 'react';
import { Redirect } from 'react-router-dom';
import Layout from '../components/Layout';
import { getPicture, getAlbums, updatePicture } from './ApiAdmin';

const UpdatePicture = ({ match }) => {

 ...

 const init = (pictureId) => {
    getPicture(pictureId).then(data => {
        if (data.err) {
            setValues({ ...values, err: data.err })
        } else {
            // populate the state
            setValues({
                ...values,
                name: data.name,
                album: data.album._id,
                formData: new FormData()
            })
            initAlbums()
        }
    })
 }

 const initAlbums = () => {
    getAlbums().then(data => {
        if (data.err) {
            setValues({
                ...values,
                error: data.err
            });
        } else {
            setValues({
                albums: data,
                formData: new FormData()
            });
         }
    });
 }

 const redirectUser = () => {
    if (redirectToProfile) {
        if (!error) {
            return < Redirect to="/" />
        }
     }
  }

 useEffect(() => {
    init(match.params.pictureId);
    redirectUser(); // allows display the changes when a picture is updated
 }, []);

...


}
import React,{useState,useffect}来自“React”;
从'react router dom'导入{Redirect};
从“../components/Layout”导入布局;
从“/ApiAdmin”导入{getPicture,getAlbums,updatePicture};
const UpdatePicture=({match})=>{
...
const init=(pictureId)=>{
getPicture(pictureId)。然后(数据=>{
if(data.err){
setValues({…values,err:data.err})
}否则{
//填充州
设定值({
价值观
name:data.name,
唱片集:data.album.\u id,
formData:new formData()
})
initAlbums()
}
})
}
const initAlbums=()=>{
getAlbums()。然后(数据=>{
if(data.err){
设定值({
价值观
错误:data.err
});
}否则{
设定值({
专辑:数据,
formData:new formData()
});
}
});
}
常量重定向用户=()=>{
如果(重定向到文件){
如果(!错误){
返回
}
}
}
useffect(()=>{
init(match.params.pictureId);
redirectUser();//允许在图片更新时显示更改
}, []);
...
}
这是给我的警告:

React Hook useEffect缺少依赖项:“init”、“match.params.pictureId”和“redirectUser”。要么包含它们,要么删除依赖项数组react hooks/dep


非常感谢有谁能帮我做这件事。

只要将它们包含在依赖项数组中即可

useEffect(() => {
    init(match.params.pictureId);
    redirectUser(); // allows display the changes when a picture is updated
 }, [init, match.params.pictureId, redirectUser]);

这些都是当它们改变时应该调用新的useEffect运行的东西。我建议让
init
redirectUser
函数使用
useCallback
,这样它们就不会在每个渲染上运行
useffect
,除非它们发生更改(它们也会有依赖项数组!)。

请参阅此处的reactjs文档

这回答了你的问题吗?您好@Diesel,谢谢您的时间!但是当我添加依赖项时,在终端中出现这个错误:编译失败。第32:9行:“init”未定义没有未定义第32:15行:“match”未定义没有未定义第32:39行:“redirectUser”未定义没有未定义忘记它,使用useCallback我能够解决警告。谢谢