Изменение значений
Подскажите, как поменять 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:10. |