Tengo un problema con React en el que mi estado de enlace se actualiza sin llamar a setState.
const [dataSet2, setDataSet2] = React.useState([ [2, 3, 4], [5, 6, 7], [8, 9, 9], ]); const badFunction = () => { let selections = []; let newSelections = []; let winPercent = 0; let newWinPercent = 1; const depth = 2; const dataHolderTest = dataSet2; let firstWeekTest = dataHolderTest[0]; const weekOneTeamsTest = firstWeekTest.slice(0, depth); for (const weekOneTeamTest of weekOneTeamsTest) { let secondWeekTest = dataHolderTest[1]; newWinPercent = weekOneTeamTest.win_percent * newWinPercent; newSelections.push(weekOneTeamTest.team); for (const team2 of secondWeekTest) { removeAllSelectedTeams(newSelections, secondWeekTest, team2); } } console.log(dataSet2); }; const removeAllSelectedTeams = (selections, dataHolder, team) => { if (selections.includes(team.team)) { const currentTeam = dataHolder.indexOf(team); dataHolder.splice(currentTeam, 1); } return dataHolder; }; He estado revisando esto por un tiempo y parece que la función removeAllSelectedTeams es el problema.
Todavía no entiendo cómo se modifica mi dataSet2 sin llamar al gancho setDataSet2
Si desea hacer una copia de una matriz o un objeto, debe hacerlo así. listTwo = [...listOne] u ObjectTwo = {...ObjectOne} . Simplemente usar = y no usar el operador de propagación no hace una copia de esa matriz u objeto para usted, sino que le da otra referencia a la misma matriz u objeto.
Intente copiar la matriz en dataHolderTest en lugar de asignarla igual a dataSet2 con el operador de propagación ...
De esta manera, no cambia la variable dataSet2 original cuando interactúa con dataHolderTest
const dataHolderTest = [...dataSet2]