Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Изменение значений (https://javascript.ru/forum/misc/86044-izmenenie-znachenijj.html)

acvafor 14.08.2024 02:18

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

Nexus 14.08.2024 04:36

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;
    });
}

ksa 14.08.2024 09:42

Цитата:

Сообщение от acvafor
Подскажите, как поменять title по id?

Например вот так...

const [list, setList] = useState([])

const changeStatus = id => {
	setList(old => old.map(o => o.id === id ? {...o, title: "#тес2" : o}))
}

acvafor 14.08.2024 19:56

Цитата:

Сообщение от ksa (Сообщение 555984)
Например вот так...

const [list, setList] = useState([])

const changeStatus = id => {
	setList(old => old.map(o => o.id === id ? {...o, title: "#тес2" : o}))
}

А почему old.map, разве не list.map ?

ksa 15.08.2024 09:38

Цитата:

Сообщение от acvafor
разве не list.map ?

Отнюдь! :nono:
Я не записываю "новый стейт"... Я передаю функцию, которая и вернет новый стейт. Она принимает старый стейт и должна вернуть новый.

Применение функции, меняющей стейт, бывает просто необходимо. Пример

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)

acvafor 15.08.2024 16:44

Цитата:

Сообщение от ksa (Сообщение 555989)
Отнюдь! :nono:
Я не записываю "новый стейт"... Я передаю функцию, которая и вернет новый стейт. Она принимает старый стейт и должна вернуть новый.

Применение функции, меняющей стейт, бывает просто необходимо. Пример

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.