使用JavaScript映射或for…of访问数组中的函数

使用JavaScript映射或for…of访问数组中的函数,javascript,arrays,reactjs,Javascript,Arrays,Reactjs,我在React中创建了一些按钮选项卡。当我单击其中一个时,它会重置所有其他选项卡以显示默认文本 函数resetAllTabs作为一个经典for循环运行良好。但是.map或for…of{}根本不会重置我的选项卡。没有错误,只是沉默 //// STATE MANAGER FOR TABS import React, { useState } from 'react'; const [currentTab, setCurrentTab] = useState(null); const

我在React中创建了一些按钮选项卡。当我单击其中一个时,它会重置所有其他选项卡以显示默认文本

函数resetAllTabs作为一个经典for循环运行良好。但是.map或for…of{}根本不会重置我的选项卡。没有错误,只是沉默

  //// STATE MANAGER FOR TABS
  import React, { useState } from 'react';
  const [currentTab, setCurrentTab] = useState(null);

  const [tab1, setTab1] = useState(<p>SET 1</p>);
  const [tab2, setTab2] = useState(<p>SET 2</p>);
  ...
  const [tab10, setTab10] = useState(<p>SET 10</p>);

  let tabs = [[tab1, setTab1], [tab2, setTab2], [tab3, setTab3], 
              [tab4, setTab4], [tab5, setTab5], [tab6, setTab6], 
              [tab7, setTab7], [tab8, setTab8], [tab9, setTab9], 
              [tab10, setTab10]]

  // WORKS JUST FINE!
  function resetAllTabs() {
    for (let i=0; i<tabs.length; i++) { 
      tabs[i][1](<p>SET {i + 1}</p>) 
    }
  };

  // DOESN'T WORK IN BROWSER. NO ERROR. JUST DOESN'T DO ANYTHING...
  function resetAllTabs() {
    tabs.map = ((setTab, i) => setTab[1](<p>SET {i + 1}</p>));
  };

  resetAllTabs();

您在使用map时遇到了一个小语法错误。虽然看起来很微妙,但您基本上是使用=运算符进行赋值,而不是使用Array.prototype.map函数

为了与你最初写的保持一致,你可能打算写这篇文章

function resetAllTabs() {
  return tabs.map( (setTab, i) => setTab[1](<p>SET {i + 1}</p>) );
};

话虽如此,正如vlaz指出的,您最好使用forEach进行迭代

您的意思是tabs.forEachsetTab,i=>…?tabs.map=setTab,i=>setTab[1]SET{i+1}

;正在使用箭头函数重写map属性。另外,在不执行映射操作时,请不要将.map用于简单的迭代。如果您需要使用迭代方法,那么就使用forEach。而且可能您甚至不需要使用迭代方法。我没有注意到在.map之后有一个=运算符!现在可以了。我也用forEach替换了map。谢谢,谢谢。实际上,我并没有试图在这里返回任何内容。@Alexanier,对了,如果要返回未定义的内容,可以省略return语句