reactjs - React - 在 useEffect 挂钩中使用 ContextAPI 中的函数缺少依赖项警告
问题描述
我正在使用 react Context 来存储一些全局状态和函数。但是,当我在 useEffect 挂钩内使用上下文中定义的函数时,会导致警告:“React Hook useEffect 缺少依赖项:mapContext”。
代码示例是这样的:
const mapContext= useContext(MapContext);
useEffect(()=>{
mapContext.getAPIToken();
mapContext.getAPICredit();
}, [])
如果我添加mapContext
到依赖项数组中,它将导致无限循环,因为getAPIToken
andgetAPICredit
函数将更新mapContext
.
我知道可以通过使用// eslint-disable-next-line react-hooks/exhaustive-deps
评论来抑制警告,但是,我想知道是否有另一种方法可以真正解决这个警告?
编辑: getAPICredit() 的实现如下所示:
const getAPICredit = async () => {
try {
const results = await axios.get('/get_apicredit', {
headers: { Authorization: authState.accessToken },
});
dispatch({
type: GET_APICREDIT,
payload: results.data,
});
} catch (err) {
handleError(err.response);
}
};
编辑2
的代码片段mapContext
:
const initialState = {
userAPI: { key: '', credit: 0 },
};
const [state, dispatch] = useReducer(MapReducer, initialState);
return (
<MapContext.Provider
value={{
userAPI: state.userAPI,
getAPIToken,
getAPICredit,
}}
>
{props.children}
</MapContext.Provider>
);
}
export default MapState;
mapReducer
片段:
case GET_APICREDIT: {
return {
...state,
userAPI: {
...state.userAPI,
credit: action.payload,
},
};
}
解决方案
推荐阅读
- php - 如何使用 php 在 wordpress 帖子中获取 gravatar?
- c# - ASP.NET Core MVC 默认模型值
- node.js - 来自经过身份验证的登录 Twitter 用户的推文
- azure - 当 Profile/Channels/SamplingRate 为 AACLC/2/48000 时,不支持比特率 64
- laravel - Laravel:带有真实文件的测试帖子
- python - Flask/Python - 在函数之间传递变量
- python-3.x - 如何在剪贴板上获取屏幕截图并更改 DPI?
- c# - 从控制器方法返回任务与返回等待任务之间的区别
- android - 使用 proguard 删除日志不起作用
- python - 在 pandas DataFrame 中创建具有特定值的列