Reputation: 95
I'm trying to change state, with values from array. Example:
const [state, setState] = useState({});
const test = [1, 2, 3];
test.map((item, i) => {
setState({ ...state, [`item-${i}`]: item });
});
Current state is:
item-2: 3
What I want to achieve is:
item-0: 1,
item-1: 2,
item-2: 3
I've tried to do it in several ways (all looking similar), but the effect is the same :/ does anyone knows how to resolve it?
Thanks!
Upvotes: 3
Views: 3950
Reputation: 10538
You can use the functional version of set state and a reduce to accomplish this:
setState(prevState => {
return test.reduce((acc, next, i) => {
return {
...acc,
[`item-${i}`]: next
},
}, prevState);
});
This has the advantage of doing it in a single call and is easier to read.
Upvotes: 1