Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.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 需要禁用应用按钮,但无法禁用一次单击切换按钮2_Javascript_Reactjs - Fatal编程技术网

Javascript 需要禁用应用按钮,但无法禁用一次单击切换按钮2

Javascript 需要禁用应用按钮,但无法禁用一次单击切换按钮2,javascript,reactjs,Javascript,Reactjs,加载时,需要禁用Apply按钮,单击Toggler1按钮,我想更改状态,即其中一个选项卡标志将为true,因此Apply按钮应启用,一旦任何选项卡中的标志为true,并且当任何选项卡中的标志为false时,当我们单击Toggler2按钮时,Apply按钮应禁用,am设置状态为flase状态,无法禁用应用按钮。 am检查标志的条件,基于此am设置状态ie setEditflase,由于其在循环中,am无法正确设置状态 单击Toggler1按钮时,应用按钮将启用,单击toggler2时,应用按钮需要

加载时,需要禁用Apply按钮,单击Toggler1按钮,我想更改状态,即其中一个选项卡标志将为true,因此Apply按钮应启用,一旦任何选项卡中的标志为true,并且当任何选项卡中的标志为false时,当我们单击Toggler2按钮时,Apply按钮应禁用,am设置状态为flase状态,无法禁用应用按钮。 am检查标志的条件,基于此am设置状态ie setEditflase,由于其在循环中,am无法正确设置状态

单击Toggler1按钮时,应用按钮将启用,单击toggler2时,应用按钮需要禁用,但即使数据中的标志为false,也无法禁用应用按钮 从React导入React; 导入./styles.css; 导出默认功能应用程序{ 让项目=[ { 表:表1, 信息:[ {助记符:第一,标志:false}, {助记符:第二,标志:false} ] }, { tab:tab2, 信息:[ {助记符:第一,标志:false}, {助记符:第二,标志:false} ] }, { tab:tab3, 信息:[ {助记符:第一,标志:false}, {助记符:第二,标志:false} ] } ]; 设项目2=[ { 表:表1, 信息:[ {助记符:第一,标志:true}, {助记符:第二,标志:false} ] }, { tab:tab2, 信息:[ {助记符:第一,标志:false}, {助记符:第二,标志:false} ] }, { tab:tab3, 信息:[ {助记符:第一,标志:false}, {助记符:第二,标志:false} ] } ]; const[edit,setEdit]=React.useStatetrue; const[data,setData]=React.useStateitems; 常量更改标志==>{ setDataitem2; }; 常量changeFlag1==>{ 设置数据项; }; React.useffect=>{ data.forEach_eachItem=>{ const isChanged=\u eachItem.info.find\u each=>\u each.flag; 如果我被换了{ setEditfalse; } }; },[数据]; 控制台日志数据; 回来 切换开关1 切换开关2 申请 ; } 您正在寻找数据数组中的某个项,以使info数组中的某个元素具有truthy标志值。这可以通过以下方式完成

您的效果需要检查是否满足此条件,并使用相反的选项更新编辑状态以禁用应用按钮

React.useEffect(() => {
  const isChanged = data.some((item) => item.info.some((el) => el.flag));
  setEdit(!isChanged);
}, [data]);
或者,使用Array.prototype.each并检查所有数据项是否具有所有虚假信息标志,然后返回并设置编辑/禁用模式的肯定确认

React.useEffect(() => {
  const isChanged = data.every((item) => item.info.every(({ flag }) => !flag));
  setEdit(isChanged);
}, [data]);

数组::forEach是一个空返回,在对数组调用find的forEach循环中实际上不做任何事情,但不对结果做任何事情,因此isChanged将始终为false。setEdit不在循环中。您的问题和问题完全不清楚。更新了说明和代码,单击Toggler1按钮后,应用按钮将启用,单击toggler2时,应用按钮需要禁用。任何选项卡中的标志为真,而任何选项卡中的标志为假,应用按钮应该被禁用…所以应用按钮应该始终被禁用,因为标志将始终为真或假?现在仍然不清楚您希望这段代码做什么。isChanged是什么?一旦标志在任何选项卡中为true,我需要启用Apply按钮,当标志为false时,我需要禁用Apply按钮,isChanged将跟踪标志,单击Toggler1,其中一个标志将被更改状态更改已处理,单击toggler2,所有标志将为falsestate更改已处理,所以按钮应该是disableditem.info.every{flag}=>!flag->您能在这里解释一下,我们是在检查标志条件还是分配标志value@chidananda检查并返回标志条件。Array.prototype.each接受一个返回布尔值的回调,flag属性很方便地是一个布尔值。两个代码段中唯一的赋值都是ischange。如果语法看起来有点滑稽的话,那就是对象分解。{flag}=>!标志与el=>相同!el.flag.我们为什么要用它!这里的条件,有什么区别,为什么需要它,因为每个都将返回布尔值value@chidananda因为有些相当于!每一个您的条件是,如果任何标志为true,则Apply disable为false。array::every意味着每个条件都必须为真才能使整个检查为真。条件是所有标志都为false。如果任何标志为true,则条件失败并返回false,即编辑为false且应用按钮未禁用。
React.useEffect(() => {
  const isChanged = data.every((item) => item.info.every(({ flag }) => !flag));
  setEdit(isChanged);
}, [data]);