Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在useEffect和window.addEventListener中设置react useState_Javascript_Reactjs_Ecmascript 6 - Fatal编程技术网

Javascript 如何在useEffect和window.addEventListener中设置react useState

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

我有两个状态变量,在页面加载时,程序会检查是否有可用的代理,如果是,则将setDefault state变量设置为true,然后如果触发语言更改事件且有可用的代理,则将SETTUDIO设置为true, 但是,当条件呈现完成时,默认值始终为true,即使我在eventListener中将其设置为false, 谁能看出我做错了什么

任何帮助都将不胜感激

 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,谢谢,我更改了它。