这是我的代码片段:
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( 我知道dispatch不会返回函数(但不确定它实际上返回了什么,一个promise?(,因此useEffect
的输入不会返回函数,因此不会发生清理/理论上执行
(2( 我知道如果useEffect的输入返回一个函数,它将用于清理,正如React-doc所说。
(3( 我这样做只是为了节省牙套。
我的问题是,我做错了什么吗?useEffect的输入是否可以返回函数旁边的东西,如果它不是函数(不可执行(,会使用Effectignore
吗?
顺便说一句,我测试了我的代码,但没有发现任何错误,我的问题可能只与Best Practice
有关,我查看了文档,也尝试查看React源代码,但未能找到任何有价值的信息。
如果您没有任何要清理的东西-您不返回函数,这是可以的,是的,useEffect
不在乎,您是否会返回函数。Dispatch
返回object,它将被useEffect
忽略。但实际上可能更棘手,调度返回值可能会更改!-https://github.com/reduxjs/redux/issues/754这取决于您使用的中间件,每个中间件都可能使您的返回对象不可预测,有些中间件可能只返回一个函数,然后它将在卸载时由useEffect
执行——谁知道会发生什么——同样,这取决于中间件及其内部逻辑。
因此,为了安全起见,我建议使用括号。尽管仅针对这种特殊情况,但当您使用dispatch
时