React Hook useEffect 缺少依赖项:'props'
Posted
技术标签:
【中文标题】React Hook useEffect 缺少依赖项:\'props\'【英文标题】:React Hook useEffect has a missing dependency: 'props'React Hook useEffect 缺少依赖项:'props' 【发布时间】:2020-12-29 11:27:43 【问题描述】:我正在尝试使用反应钩子(这是我第一次),但是在使用 useEffect 时出现此错误,例如上面的 componentDidMount:'React Hook useEffect 缺少依赖项:'props'。包括它或删除依赖数组。然而,当 any props 时,'props' 会改变 更改,因此首选的解决方法是在 useEffect 调用之外解构“props”对象,并在 useEffect 中引用那些特定的 props'
我正在尝试向 API 发出 GET 请求,这需要 url 中的一些道具。这是我的代码:
function SomeComponent(props)
const [data, setData] = useState();
const [loading, setLoading] = useState(true);
const [hasError, setErrors] = useState(false);
useEffect(() =>
async function fetchData()
try
let response = await Axios.get( `/some-url/$props.obj.id/abc`,
);
let data = response.data;
setData(data);
setLoading(false);
props.totalStats(data );
catch (error)
setErrors(error);
setLoading(false);
fetchData();
, []);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
我一直在寻找并尝试这些解决方案,但它们对我不起作用:
const id = props.obj.id;
const totalStats = props.totalStats
useEffect(()=>
//Here is the code
//I replace the $ props.obj.id by the id and the function props.totalStats by //totalStats
,[id,totalStats]
这样做我在 id 和对函数的调用中获得了一个 undefined。
然后我尝试这样做:
useEffect(()=>
//here is the code like the first one
,[props])
但这会向 api 发出 n 个请求
【问题讨论】:
我认为你不需要将 props 放入依赖数组中...... 是的,但这就是我在第一个代码中所做的,我得到了这个:React Hook useEffect 缺少依赖项:'props'。包括它或删除依赖数组。但是,当 any 道具发生变化时,“道具”会发生变化,因此首选的解决方法是在 useEffect 调用之外解构“道具”对象,并在 useEffect 中引用那些特定的道具 也许这会有所帮助? ***.com/questions/55840294/… 是的,这对我有帮助,然后我得到了那个错误 【参考方案1】:从常量导入中移除大括号。
所以它应该看起来像这样:
function SomeComponent(props)
const objId = props.obj.id;
const totalStats = props.totalStats;
const [data, setData] = useState();
const [loading, setLoading] = useState(true);
const [hasError, setErrors] = useState(false);
useEffect(() =>
async function fetchData()
try
let response = await Axios.get( `/some-url/$objId/abc`,
);
let data = response.data;
setData(data);
setLoading(false);
totalStats(data );
catch (error)
setErrors(error);
setLoading(false);
fetchData();
, [objId, totalStats]);
【讨论】:
请描述你做了什么,以便 OP 和其他人可以看到导致错误的原因。【参考方案2】:答案已经被接受,但只是为了澄清为什么 OP 的解决方案在一开始就不起作用,这与分配 const 无关。这是因为 OP 在解构属性时犯了一个错误。正确的做法:
const id = props.obj;
const totalStats = props
请注意,我没有输入props.object.id
或props.totalStats
。因为如果你把这些放在你实际上是在尝试从props.object.id
对象中解构id
。和totalStats
来自props.totalStats
。没有这样的属性,所以 OP 得到了未定义的错误。
您还可以从 props 对象中分配一个常量作为接受答案的方式。这实际上是一回事。
【讨论】:
以上是关于React Hook useEffect 缺少依赖项:'props'的主要内容,如果未能解决你的问题,请参考以下文章
React Hook useEffect 缺少依赖项:'props' 由于 useEffect 中有一行
React Hook useEffect 缺少依赖项(没有在 useEffect 中移动函数)
反应 | React Hook useEffect 缺少依赖项