React Hook useEffect缺少依赖项:“列表”

时间:2019-05-01 15:44:24

标签: reactjs react-hooks

一旦运行下面的代码,就会出现以下错误:

React Hook useEffect缺少依赖项:“列表”。要么包含它,要么删除依赖项数组react-hooks / exhaustive-deps 我不知道是什么原因发出警告。

import React, { useState, useEffect } from 'react';
import axios from 'axios';
import Form from './Form';

const App = () => {
  const [term, setTerm] = useState('pizza');
  const [list, setList] = useState([]);

  const submitSearch = e => {
    e.preventDefault();
    setTerm(e.target.elements.receiptName.value);
  };

  useEffect(() => {
    (async term => {
      const api_url = 'https://www.food2fork.com/api';
      const api_key = '<MY API KEY>';

      const response = await axios.get(
        `${api_url}/search?key=${api_key}&q=${term}&count=5`
      );

      setList(response.data.recipes);
      console.log(list);
    })(term);
  }, [term]);

  return (
    <div className="App">
      <header className="App-header">
        <h1 className="App-title">Recipe Search</h1>
      </header>
      <Form submitSearch={submitSearch} />
      {term}
    </div>
  );
};

export default App;

5 个答案:

答案 0 :(得分:6)

您可以通过插入评论来禁用它

// eslint-disable-next-line

答案 1 :(得分:4)

您可以通过以下方式禁用棉绒警告:

// eslint-disable-next-line react-hooks/exhaustive-deps
}, [term]);

答案 2 :(得分:2)

dependency array-它是useEffect函数中的第二个可选参数。如果useEffect中的参数将从上一个渲染更改,React将调用dependency array函数的第一个参数中定义的函数。

然后,您无需将list变量放在dependency array内。

  useEffect(() => {
    // do some

    // eslint-disable-next-line react-hooks/exhaustive-deps
  }, [term]);

答案 3 :(得分:1)

在useEffect内部,您正在记录list

console.log(list);

因此,您需要删除上面的行,或者在末尾将list添加到useEffect依赖项。 所以改变这一行

}, [term]);

}, [term, list]);

答案 4 :(得分:1)

出现此警告是因为您在useEffect中使用了状态“列表”。因此,react会警告您“列表”未添加到依赖项,因此对“列表”状态的任何更改都不会触发此效果再次运行。
您可以找到更多帮助here