reactjs - 在 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 源代码,但没有找到任何有价值的信息。
解决方案
如果您没有任何要清理的东西-您不返回函数,这没关系,是的,useEffect
不在乎,您是否会返回函数。
Dispatch
返回对象,它将被忽略useEffect
。但实际上它可能更棘手,调度返回值可能会改变!- https://github.com/reduxjs/redux/issues/754
这取决于您使用的中间件,并且每个中间件都可以使您的返回对象不可预测,并且某些中间件可能只是返回一个函数,然后它将useEffect
在卸载时执行- 谁知道会发生什么 - 再次取决于中间件及其内部逻辑。
所以我建议使用括号是安全的。虽然仅适用于这种特殊情况,但当您使用dispatch
推荐阅读
- haskell - Haskell 打印返回值(又一个 Haskell 教程,askForWords)
- javascript - 元素达到最终状态而不显示过渡/动画
- ruby - GraphQL::Client::ValidationError:变量 $id 和参数 eq 上的类型不匹配(字符串!/ ItemId)
- r - 如何为订单号的第一个实例添加金额
- postgresql - 通过 SSL 连接到 Crunchy HA PostgreSQL Postgis 数据库的 QGIS 错误
- php - 使用 json:如何在 php 中随机显示 json 数组
- css - Style Contact 7 Form 日历选择器图标颜色
- javascript - 无法在选择框更改时触发事件
- sass - 将 svelte 与 sass 一起使用时出现“错误:缩进语法中不允许使用分号”
- javascript - 我可以在 html 中创建具有多个选项的对象吗?