javascript - 函数未在 Hook 中执行
问题描述
我有一个组件,我想通过一个函数在其中分派 Redux 操作。我不明白的是,该功能没有执行。在console.log()
函数调用被记录之前和之后bar()
,但是当我尝试console.log()
从函数中调用bar()
时,这没有任何效果......为什么会这样?
// Foo.js
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
import React from 'react';
import { bar } from './actions';
const Foo = () => {
useEffect(() => {
console.log('I get logged');
bar();
console.log('I get logged too');
}, [])
return <Whatever> ... </Whatever>
};
const mapDispatchToProps = dispatch => {
return bindActionCreators({
bar,
}, dispatch)
};
const mapStateToProps = state => {
const { ... } = state
return {
...: ...
}
};
export default connect(mapStateToProps, mapDispatchToProps)(Foo);
// actions.js
export const bar = () => async dispatch => {
console.log('I do not get logged');
await ...
dispatch({ type: ..., ... });
};
解决方案
因为bar
此时引用您的未绑定操作创建者,而不是来自connect
. 你必须使用props.bar
才能得到它。但你不应该。
一般来说,你不应该使用connect
with 函数组件,而是使用useDispatch
and useSelector
react-redux hooks。
所以它应该看起来像
const Foo = () => {
const dispatch = useDispatch();
useEffect(() => {
console.log('I get logged');
dispatch(bar());
console.log('I get logged too');
}, [dispatch])
return <Whatever> ... </Whatever>
};
没有任何使用connect
任何地方。
推荐阅读
- swagger - 在 $ref open api 3.0 上引用远程“响应”和“参数”
- azure - 如何使用 Azure EventGrid webhook 保持幂等性?
- php - 选择选项值
- python - django.db.utils.ProgrammingError:关系“auth_group”不存在
- c - GSM SIM900A 模块与 PIC18F4520 控制器接口
- scala - Scala Cats State Monad
- angular - 为什么在进行 AOT 构建时不能在导出中使用简单的数组方法
- python - 目标重启后pydbus重新连接
- python - 如何在 Python Pandas 中将值从一行结转到另一行,我正在尝试复制 SAS 保留语句的功能
- deployment - 在自动缩放条件下重新部署时,Kubernetes 滚动更新不遵守“maxUnavailable”副本