在UseEffect中使用`dispatch`挂钩

时间:2020-05-08 07:01:38

标签: javascript reactjs

当我的React组件卸载时,我想dispatch采取一些措施。在使用挂钩时,不能使用componentWillUnmount。相反,我使用的是useEffect钩子:

const dispatch = useDispatch();
useEffect(() => () => dispatch(setValue()), []);

以上代码引发警告“ React Hook useEffect缺少依赖项:'dispatch'。要么包含它,要么删除依赖项数组”。我不能在依赖项数组中包含dispatch,因为它将useEffect更改时使dispatch运行,但是我希望它仅在组件卸载时才运行。为此,我需要传递一个空数组。

如何在不删除babel相应的掉毛规则的情况下解决此警告?

1 个答案:

答案 0 :(得分:1)

dispatch不应更改,这是redux存储提供的调度功能。 react hook短绒只是将其视为功能,但是警告您 可能会被突变。我认为您虽然语法错误,但缺少括号。我认为应该是

useEffect(() => () => dispatch(setValue()), []);

不过,如有必要,您可以忽略该行的规则

// eslint-disable-next-line react-hooks/exhaustive-deps

用法

// eslint-disable-next-line react-hooks/exhaustive-deps
useEffect(() => () => dispatch(setValue()), []);

或(IMO更容易阅读)

useEffect(() => {
  return () => dispatch(setValue());
  // eslint-disable-next-line react-hooks/exhaustive-deps
}, []);