Изменение значений
Подскажите, как поменять title по id?
const [list, setList] = useState([]) const changeStatus = (id) => { list.filter((x) => x.id == id).forEach((x)=> {x.title = "#тес2"}) } changeStatus(передаю id) Как мне это передать в setlist? Пробовал через list.map(obj =>{ if(obj.id === id){ obj.title = id } }) Тоже не понял как передать в setlist Сама структура данных [{"color": "black", "done": false, "dscr": "", "id": "0.886308390783848", "title": "1"}, {"color": "black", "done": false, "dscr": "44", "id": "0.060414084096957345", "title": "2"}] |
const [list, setList] = useState([]) const changeStatus = (id) => { setList(list => { const newList = list.slice(); const index = newList.findIndex(i => i.id === id); if (index !== -1) { newList[index].title = '#тес2'; } return newList; }); } |
Цитата:
const [list, setList] = useState([]) const changeStatus = id => { setList(old => old.map(o => o.id === id ? {...o, title: "#тес2" : o})) } |
Цитата:
|
Цитата:
Я не записываю "новый стейт"... Я передаю функцию, которая и вернет новый стейт. Она принимает старый стейт и должна вернуть новый. Применение функции, меняющей стейт, бывает просто необходимо. Пример const [val, setVal] = useState() // ... setVal(val + 1) setVal(val + 1) setVal(val + 1) setVal(val + 1) // результат тебя удивит ;) Использование функции решает эту проблему setVal(old => old + 1) setVal(old => old + 1) setVal(old => old + 1) setVal(old => old + 1) |
Цитата:
" Here, a => a + 1 is your updater function. It takes the pending state and calculates the next state from it " |
Часовой пояс GMT +3, время: 17:47. |