使用JavaScript映射或for…of访问数组中的函数
我在React中创建了一些按钮选项卡。当我单击其中一个时,它会重置所有其他选项卡以显示默认文本 函数resetAllTabs作为一个经典for循环运行良好。但是.map或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
//// 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语句