【发布时间】:2021-02-17 07:54:45
【问题描述】:
我正在使用 apisauce 为我的应用创建 api。而apisauce 有一个函数调用addMonitor,这里是:https://github.com/infinitered/apisauce#adding-monitors。
但是当我将useDispatch 添加到naviMonitor 时,后面的代码无法运行。具体来说,我无法记录response。贝娄是我的Api.js:
import apisauce from 'apisauce';
import {useDispatch} from 'react-redux';
const create = () => {
...
const naviMonitor = (response) => {
const dispatch = useDispatch();
const {status} = response || {};
if ( (status && status === 200) ) {
console.log(response);
} else {
// TODO
}
};
api.addMonitor(naviMonitor);
}
我哪里错了?
谢谢你的帮助。
【问题讨论】:
-
看起来你打破了钩子的规则。 Hook 应该位于功能组件主体的顶层。
create是什么?能否提供一个Minimal, Complete, and Reproducible 代码示例? -
所以我必须将
const dispatch = useDispatch()放在const create = ()行的正下方? -
是的,如果
create是一个 React 组件,则在主体顶部的某个位置。用分钟代码 sn-p 很难确定。 -
如果您仍然需要更多帮助,那么我认为包含一个更完整的代码示例将是有益的,这样我们就可以更好地了解您的用例。
-
这是一个组件还是一个纯函数?只能在函数组件内部调用 useDispatch,否则会破坏钩子的规则。如果您想从纯函数调用调度,那么您必须访问以其他方式调度。来自您的全局商店实例,或者通过将 dispatch 作为参数传递给您的 create 函数。
标签: reactjs react-native redux react-redux