【发布时间】:2021-01-31 16:39:20
【问题描述】:
我有这段代码应该执行以下操作:
- 在第一次渲染后调度 thunk 加载数据
- 调度动作以重置状态作为该效果的清理函数
由于dispatch 和slug 在组件生命周期内不会发生变化,所以清理基本上会在组件卸载后运行。
const dispatch = useDispatch();
const slug = props.match.params.slug || "";
useEffect(() => {
dispatch(THUNKS.LOAD_DATA(slug));
return () => { dispatch(ACTIONS.RESET_STATE()); };
},[dispatch,slug]);
一切都按预期工作。但我想把清理函数写成:
return () => dispatch(ACTIONS.RESET_STATE());
我知道箭头函数会添加一个隐含的return 语句,如果我这样写的话。所以基本上我正在返回dispatch() 电话。
因此,Typescript 抱怨以下错误消息:
Argument of type '() => () => { payload: undefined; type: string; }' is not assignable to parameter of type 'EffectCallback'.
我认为正在发生的事情:EffectCallback 可能期待 void 成为 return,突然间我返回了一个 dispatch() 电话。
我可以自定义键入EffectCallback 以某种方式接受此返回调用并消除此错误吗?
【问题讨论】:
标签: reactjs typescript use-effect