Wpis z mikrobloga

Co mam zrobić aby w strict mode mi nie dodawało rzeczy po 2 razy przy setState?

saveData = (collection, item) => {
if (item.id === "") {
item.id = this.idCounter++;
this.setState(state => state[collection]= state[collection].concat(item));
} else {
this.setState(state => state[collection]
= state[collection].map(stored =>
stored.id === item.id ? item: stored))
}
};

Uczę się reacta od tygodnia. Kojarzę, że z różnych powodów przy strictMode uruchamia np. render() dwa razy aby wykrywać różne problemy w wersji dev jakie się mogą pojawić. No i mi właśnie wykryło bo dodaje po 2 razy elementy. A w debuggerze w przeglądarce wygląda jakby aby jeden raz szło przez tą metodę.
#react #javascript #programowanie
  • 2
to chyba nie jest wina strictModa (nie wiem, nie używałem), ale na pewno this.setState powinno zwracać nowy obiekt, nie powinno się modyfikować stanu ręcznie. Spróbuj
w ifie:

this.setState({
[collection]: [...this.state.collection, item]
});

w elsie

this.setState({
[collection]: this.state[collection].map(stored => stored.id === item.id ? item : stored)
});

Tym sposobem zupdatujesz state tylko raz, a aktualnie robisz to 2 razy - w setState i w funkcji przekazywaniej do setState