Javascript 如何在useEffect和window.addEventListener中设置react useState
我有两个状态变量,在页面加载时,程序会检查是否有可用的代理,如果是,则将setDefault state变量设置为true,然后如果触发语言更改事件且有可用的代理,则将SETTUDIO设置为true, 但是,当条件呈现完成时,默认值始终为true,即使我在eventListener中将其设置为false, 谁能看出我做错了什么 任何帮助都将不胜感激Javascript 如何在useEffect和window.addEventListener中设置react useState,javascript,reactjs,ecmascript-6,Javascript,Reactjs,Ecmascript 6,我有两个状态变量,在页面加载时,程序会检查是否有可用的代理,如果是,则将setDefault state变量设置为true,然后如果触发语言更改事件且有可用的代理,则将SETTUDIO设置为true, 但是,当条件呈现完成时,默认值始终为true,即使我在eventListener中将其设置为false, 谁能看出我做错了什么 任何帮助都将不胜感激 const Home = ({ t, i18n, history }) => { const [defaultStudio, se
const Home = ({ t, i18n, history }) => {
const [defaultStudio, setDefaultStudio] = useState(false);
const [studio, setStudio] = useState(false);
useEffect(() => {
checkForAvailableAgent(LINK_TO_AGENT)
.then(res => {
setDefaultStudio(res);
})
.catch(error => {
console.log("an error happened.");
});
window.addEventListener("langChange", () => {
if(i18n.language === "en") {
checkForAvailableAgent(LINK_TO_AGENT)
.then(res => {
setStudio(res);
setDefaultStudio(false);
})
.catch(error => {
console.log("an error happened.");
});
} else {
setStudio(false);
setDefaultStudio(false);
}
});
},[defaultStudio, studio, i18n.language]);
return (
defaultStudio ?
(<Button>Call live</Button>)
:
(<Button>Call</Button>)
)
}
consthome=({t,i18n,history})=>{
const[defaultStudio,setDefaultStudio]=useState(false);
const[studio,setStudio]=useState(false);
useffect(()=>{
检查可用代理(链接到代理)
。然后(res=>{
setDefaultStudio(res);
})
.catch(错误=>{
log(“发生错误”);
});
window.addEventListener(“langChange”,()=>{
如果(i18n.language==“en”){
检查可用代理(链接到代理)
。然后(res=>{
setStudio(res);
setDefaultStudio(假);
})
.catch(错误=>{
log(“发生错误”);
});
}否则{
setStudio(错误);
setDefaultStudio(假);
}
});
},[defaultStudio,studio,i18n.language]);
返回(
默认工作室?
(现场通话)
:
(电话)
)
}
您必须使用removeEventListener
试试这个:
const handleUserlangChange = useCallback(event => {
// do somethings
}, []);
useEffect(() => {
window.addEventListener('langChange', handleUserlangChange);
return () => {
window.removeEventListener('langChange', handleUserlangChange);
};
},[default, studio, i18n.language]);
默认值是javascript中受保护的关键字
var default = 1;
SyntaxError: missing variable name
它用于标识默认的导出模块<代码>导出默认myComponent代码>
重命名变量应该可以解决这个问题 我刚刚修复了它,只是为了将来参考,我不得不从useEffect中删除[default,studio,i18n.language]。这里的答案可能会帮助您如何知道您的事件侦听器曾经被触发过?我建议添加更多日志记录,包括事件侦听器入口点。您的代码在语法上看起来不正确。如果addEventListener缺少您的close
}
&)
,您的控制台中是否没有错误。您的缩进也错误,请更正,这样会更明显。返回({defaultStudio?
)看起来也不正确,您是否也没有收到任何错误,将{
放在(
告诉JS引擎启动一个对象文本..只需执行返回defaultStudio?
即可..@Keith,谢谢,我更改了它。