xxxxxxxxxx
const [array, setArray] = useState([1, 2, 3])
// Add
setArray(prevArray => [prevArray, 4]); // -> [1, 2, 3, 4]
// Remove last entry
setArray(prevArray => prevArray.splice(0, prevArray.length - 1)); // -> [1, 2, 3]
xxxxxxxxxx
const initialState = [
{ name: "foo", counter: 0 },
{ name: "far", counter: 0 },
{ name: "faz", counter: 0 }
];
const [state, setState] = useState(initialState);
const clickButton = () => {
// 1. Make a shallow copy of the array
let temp_state = [state];
// 2. Make a shallow copy of the element you want to mutate
let temp_element = { temp_state[0] };
// 3. Update the property you're interested in
temp_element.counter = temp_element.counter+1;
// 4. Put it back into our array. N.B. we *are* mutating the array here, but that's why we made a copy first
temp_state[0] = temp_element;
// 5. Set the state to our new copy
setState( temp_state );
}
xxxxxxxxxx
let markers = [ this.state.markers ];
markers[index] = {markers[index], key: value};
this.setState({ markers });
xxxxxxxxxx
const handleAdd = (todo) => {
const newTodos = [todos];
newTodos.push(todo);
setTodos(newTodos);
}
xxxxxxxxxx
setArtists( // Replace the state
[ // with a new array
artists, // that contains all the old items
{ id: nextId++, name: name } // and one new item at the end
]
);
xxxxxxxxxx
let newMarkers = markers.map(el => (
el.name==='name'? {el, key: value}: el
))
this.setState({ markers });