Reactjs 反应:修复缺少的依赖项警告useEffect和引用
我有一个功能组件,如果调用API时出错,我希望打开一个显示该错误的模式。决定此模式是否打开的属性使用上下文API存储。 因此,我在组件中有以下代码:Reactjs 反应:修复缺少的依赖项警告useEffect和引用,reactjs,react-hooks,react-functional-component,Reactjs,React Hooks,React Functional Component,我有一个功能组件,如果调用API时出错,我希望打开一个显示该错误的模式。决定此模式是否打开的属性使用上下文API存储。 因此,我在组件中有以下代码: const modalContext = useContext(ModalContext); useEffect(() => { if (error !== "") { modalContext.showModal(); } }, [error]); 但我有一个警告: React
const modalContext = useContext(ModalContext);
useEffect(() => {
if (error !== "") {
modalContext.showModal();
}
}, [error]);
但我有一个警告:
React Hook useEffect缺少依赖项:“modalContext”。包括它或删除依赖项数组react hooks/dep
我读到为了解决这个问题,我可以使用refs,所以我更改了代码,现在我有:
const modalContextRef = React.useRef(false);
modalContextRef.current = useContext(ModalContext);
useEffect(() => {
if (error !== "") {
modalContextRef.current.showModal();
}
}, [error]);
我不知道这是正确的方法,还是一种不好的做法
谢谢 您可以尝试将modalContext添加到其依赖项中
useEffect(() => {
if (error !== "") {
modalContext.showModal();
}
}, [error, modalContext]);
也许以下几点对你有用:
const ModalContext=React.createContext();
const ModalProvider=({children})=>{
常量[isModalOpen,setIsModalOpen]=React.useState(
假的
);
//显示模式从不更改,因为使用useCallback
const showModal=React.useCallback(
()=>setIsModalOpen(真),
[]
);
返回(
{儿童}
);
};
常量模态=()=>{
const{isModalOpen}=React.useContext(ModalContext);
返回isModalOpen?“模态显示”:null;
};
常量应用=()=>{
const[error,setError]=React.useState(“”);
const{showmodel}=React.useContext(ModalContext);
React.useffect(()=>{
如果(错误!=''){
showModal();
}
},[error,showmodel]);
返回(
setError('error')}>
设置错误
);
};
ReactDOM.render(
,
document.getElementById('root'))
);代码>
这取决于showmodel是什么,以及它是否可以有一个showmodel函数来更改“isModalOpen”的布尔值。这就是我保存在上下文API中的变量。我想使用context API来看看它是如何与这个示例一起工作的,这个示例具有一个模态,并且不在几个组件中传递变量“isModalOpen”。试一试,对吗<代码>modalContext.showmodel()
在modalContex
和.showmodel()之间有一个空格对不起,那只是一个印刷错误。我会纠正它。这以一个循环结束,因为我显示了模式,然后单击了关闭按钮的模式,但是react检测到依赖关系的变化,并在useEffect中执行代码,在用户关闭模式时再次显示模式。哦。那是因为我没有看到你的完整代码。您可以设置一个额外的状态来控制模式何时显示并出现错误。是的,这是有效的!它帮助我以一种更有效的方式重新构建代码,使用这些回调不需要设置依赖项“modalContext”,只需要设置函数“showmodel”。因此,当我隐藏模式时,React不会再次执行useEffect显示模式。谢谢