当将空数组作为第二个参数传递时,React Hook useEffect缺少依赖项

MihaŠušteršič

我的useEffect功能组件中有以下挂钩,我只想使用一次(安装组件时),以便从API加载一些数据:

const Gear = () => {
  const [weaponOptions, setWeaponOptions] = useState([
    {
      key: "0",
      label: "",
      value: "null"
    }
  ]);
  const [weapon, setWeapon] = useState("null");

  useEffect(() => {
    console.log("Gear.tsx useEffect");

    const fetchWeaponsOptions = async (): Promise<void> => {
      const weaponsData = await getWeapons();
      const newWeaponOptions: DropdownOptionType[] = [
        ...weaponOptions,
        ...weaponsData.map(({ id, name }) => {
          return {
            key: id,
            label: name,
            value: id
          };
        })
      ];
      setWeaponOptions(newWeaponOptions);
    };

    fetchWeaponsOptions();
  }, []);

  // TODO add weapon dropdown on change, selected weapon state
  const handleWeaponChange = ({ value }: DropdownOptionType): void => {
    setWeapon(value);
  };

  return (
    <div>
      <h2>Gear:</h2>
      <Dropdown
        defaultValue={weapon}
        label="Weapon"
        name="weapon"
        options={weaponOptions}
        onChange={handleWeaponChange}
      />
    </div>
  );
};

一个React文档说明指出,当您只希望效果在安装卸载时运行时,这是有效的做法:

如果要运行效果并仅将其清理一次(在挂载和卸载时),则可以传递一个空数组([])作为第二个参数。这告诉React您的效果不依赖于道具或状态的任何值,因此它不需要重新运行。这不是特殊情况,它直接取决于依赖项数组始终如何工作。

但是我收到以下create-react-app linter警告:

35:6 warning React Hook useEffect has a missing dependency: 'weaponOptions'. Either include it or remove the dependency array react-hooks/exhaustive-deps

weaponOptions如果我将数组作为依赖项传递,则useEffect会触发数组是否发生更改,这会导致无限循环,因为钩子本身会更改武器选项状态。如果我省略了空数组参数,也会发生同样的事情。

这里正确的方法是什么?

丹尼斯瓦什

我只想使用一次(安装组件时),以便从API加载一些数据

因此,根据您的逻辑,您无需依赖组件的状态:

const INITIAL = [
  {
    key: '0',
    label: '',
    value: 'null'
  }
];

const App = () => {
  const [weaponOptions, setWeaponOptions] = useState(INITIAL);

  useEffect(() => {
    const fetchWeaponsOptions = async () => {
      const weaponsData = await getWeapons();
      const weaponsOptions = [
        ...INITIAL, // No state dependency needed
        ...weaponsData.map(({ id, name }) => {
          return {
            key: id,
            label: name,
            value: id
          };
        })
      ];
      setWeaponOptions(weaponsOptions);
    };

  }, []);

  return <></>;
};

但是,当您想使用useEffect一次(这取决于一个状态)时,通常会使用布尔引用,如下所示:

const App = () => {
  const [weaponOptions, setWeaponOptions] = useState(INITIAL);

  const isFirstFetch = useRef(true);

  useEffect(() => {
    const fetchWeaponsOptions = async () => {...}

    if (isFirstFetch.current) {
      fetchWeaponsOptions();
      isFirstFetch.current = false;
    }
  }, [weaponOptions]);

  return <></>;
};

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

React Hook useEffect与useEffect缺少依赖项

来自分类Dev

React Hook useEffect 缺少空数组依赖项的依赖项

来自分类Dev

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

来自分类Dev

React Hook useEffect缺少依赖项

来自分类Javascript

React Hook useEffect缺少依赖项:“ props”

来自分类Javascript

React Hook useEffect缺少依赖项:'fetchData'

来自分类Dev

React Hook useEffect缺少依赖项:“ dispatch”

来自分类Dev

React Hook useEffect 缺少依赖项:'execute'

来自分类Dev

反应| React Hook useEffect缺少依赖项

来自分类Dev

React Hook useEffect 缺少依赖项:'getContacts'

来自分类Dev

React Hook useEffect缺少依赖项

来自分类Dev

React Hook useEffect缺少依赖项:“ getNewPins”

来自分类Dev

React Hook useEffect 缺少依赖项 - 问题

来自分类Dev

React Hook useEffect 缺少依赖项:

来自分类Dev

React Hook useEffect 缺少依赖项

来自分类Dev

React Hook useEffect缺少依赖项:'fetchUser'。useEffect问题?

来自分类Dev

仅具有一个依赖项的useEffect / React Hook useEffect缺少依赖项:'props'

来自分类Dev

如何删除“ React Hook useEffect缺少依赖项”警告

来自分类Dev

React Hook useEffect缺少依赖项:“历史记录”

来自分类Dev

如何解决“React Hook useEffect 缺少依赖项:'currentPosition'”

来自分类Dev

如何修复 React Hook useEffect 缺少依赖项:

来自分类Javascript

React Hook useEffect缺少依赖项:'formData'。包括它或删除依赖项数组。什么是依赖是使用

来自分类Dev

如何解决“ React Hook useEffect缺少依赖项。包括它或删除依赖项数组”的问题?

来自分类Dev

React Hook useEffect缺少依赖项:“ colors”和“ options”。包括它们或删除依赖项数组

来自分类Dev

React Hook useEffect 缺少依赖项:“dispatch”和“logout”。包括它们或删除依赖数组

来自分类Dev

React Hook useEffect缺少依赖项数组

来自分类Dev

当警告是[]时,React警告React React Hook useEffect缺少依赖项

来自分类Dev

使用useEffect React Hook时如何解决缺少依赖项警告?

来自分类Dev

我收到一个奇怪的警告“React hook useEffect 缺少依赖项”

Related 相关文章

  1. 1

    React Hook useEffect与useEffect缺少依赖项

  2. 2

    React Hook useEffect 缺少空数组依赖项的依赖项

  3. 3

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

  4. 4

    React Hook useEffect缺少依赖项

  5. 5

    React Hook useEffect缺少依赖项:“ props”

  6. 6

    React Hook useEffect缺少依赖项:'fetchData'

  7. 7

    React Hook useEffect缺少依赖项:“ dispatch”

  8. 8

    React Hook useEffect 缺少依赖项:'execute'

  9. 9

    反应| React Hook useEffect缺少依赖项

  10. 10

    React Hook useEffect 缺少依赖项:'getContacts'

  11. 11

    React Hook useEffect缺少依赖项

  12. 12

    React Hook useEffect缺少依赖项:“ getNewPins”

  13. 13

    React Hook useEffect 缺少依赖项 - 问题

  14. 14

    React Hook useEffect 缺少依赖项:

  15. 15

    React Hook useEffect 缺少依赖项

  16. 16

    React Hook useEffect缺少依赖项:'fetchUser'。useEffect问题?

  17. 17

    仅具有一个依赖项的useEffect / React Hook useEffect缺少依赖项:'props'

  18. 18

    如何删除“ React Hook useEffect缺少依赖项”警告

  19. 19

    React Hook useEffect缺少依赖项:“历史记录”

  20. 20

    如何解决“React Hook useEffect 缺少依赖项:'currentPosition'”

  21. 21

    如何修复 React Hook useEffect 缺少依赖项:

  22. 22

    React Hook useEffect缺少依赖项:'formData'。包括它或删除依赖项数组。什么是依赖是使用

  23. 23

    如何解决“ React Hook useEffect缺少依赖项。包括它或删除依赖项数组”的问题?

  24. 24

    React Hook useEffect缺少依赖项:“ colors”和“ options”。包括它们或删除依赖项数组

  25. 25

    React Hook useEffect 缺少依赖项:“dispatch”和“logout”。包括它们或删除依赖数组

  26. 26

    React Hook useEffect缺少依赖项数组

  27. 27

    当警告是[]时,React警告React React Hook useEffect缺少依赖项

  28. 28

    使用useEffect React Hook时如何解决缺少依赖项警告?

  29. 29

    我收到一个奇怪的警告“React hook useEffect 缺少依赖项”

热门标签

归档