首页 > 解决方案 > 在 useEffect 钩子中返回函数以外的值是不是很糟糕?

问题描述

这是我的代码片段:

import { useEffect } from 'react';
import { useDispatch } from 'react-redux';
import { someMethod } from 'components/actions';

const MyComponent = {
   ...
   const dispatch = useDispatch();
   
   useEffect(() => dispatch(someMethod), [dispatch]);
   // Instead of: useEffect(() => { dispatch(someMethod); }, [dispatch]);
   ...
}

(1)我知道调度不会返回一个函数(但不确定它实际上返回了什么,一个承诺?),因此输入useEffect不会返回一个函数,因此理论上不会发生/执行清理

(2)我知道如果useEffect的输入返回一个函数,它将用于清理,正如React doc所说。

(3)我这样做,只是为了节省大括号。

我的问题是,我做错了什么吗?useEffect 的输入是否可以返回函数旁边ignore的内容,如果它不是函数(不可执行),是否会使用它?

顺便说一句,我测试了我的代码,但没有发现任何错误,我的问题可能只与 相关Best Practice,我检查了文档,还尝试查看 React 源代码,但没有找到任何有价值的信息。

标签: reactjsreact-reduxreact-hooks

解决方案


如果您没有任何要清理的东西-您不返回函数,这没关系,是的,useEffect不在乎,您是否会返回函数。 Dispatch返回对象,它将被忽略useEffect。但实际上它可能更棘手,调度返回值可能会改变!- https://github.com/reduxjs/redux/issues/754 这取决于您使用的中间件,并且每个中间件都可以使您的返回对象不可预测,并且某些中间件可能只是返回一个函数,然后它将useEffect在卸载时执行- 谁知道会发生什么 - 再次取决于中间件及其内部逻辑。

所以我建议使用括号是安全的。虽然仅适用于这种特殊情况,但当您使用dispatch


推荐阅读