Size: a a a

React — русскоговорящее сообщество

2020 September 21

Е

Егорка in React — русскоговорящее сообщество
Это для второго сет стейта ведь?
источник

DT

Daniil Tchernyavsky in React — русскоговорящее сообщество
Егорка
help anybody:
Есть такая ситуация
    this.state = {
     foo: {
       bar: 123,
       var: 321
     }
   }
Когда я произвожу в одной функции последовательно
    this.setState({
     foo: {
       ...this.state.foo, ['var']: 1234
     }
   })

   this.setState({
     foo: {
       ...this.state.foo, ['bar']: 4321
     }
   })
Два изменения стейта, которые включают в себя перезаписывание остальных полей, то происходит страшное. А именно:
Я получаю
foo.var = 321
foo.bar = 4321
А хотелось бы получить
foo.var = 1234
foo.bar = 4321

Как это провернуть?
сет стейт не синхронный, тут нет последовательного
источник

EM

Eugene Maltsev in React — русскоговорящее сообщество
🤔не помню нужно ли ...prevState полностью возвращать, или только то что изменилось.
это для обоих.
и почему нельзя в один обвернуть
источник

DT

Daniil Tchernyavsky in React — русскоговорящее сообщество
2 параметр сет стейта - колбек с актуальным стейтом
источник

Е

Егорка in React — русскоговорящее сообщество
Условия есть, тут уж я наглядно упростил
источник

AH

Alex Hyriavets in React — русскоговорящее сообщество
Егорка
help anybody:
Есть такая ситуация
    this.state = {
     foo: {
       bar: 123,
       var: 321
     }
   }
Когда я произвожу в одной функции последовательно
    this.setState({
     foo: {
       ...this.state.foo, ['var']: 1234
     }
   })

   this.setState({
     foo: {
       ...this.state.foo, ['bar']: 4321
     }
   })
Два изменения стейта, которые включают в себя перезаписывание остальных полей, то происходит страшное. А именно:
Я получаю
foo.var = 321
foo.bar = 4321
А хотелось бы получить
foo.var = 1234
foo.bar = 4321

Как это провернуть?
1. setState асинхронный
2. зачем вам два раза его вызывать? В чём проблема засетить всё за раз?
источник

Е

Егорка in React — русскоговорящее сообщество
Егорка
Условия есть, тут уж я наглядно упростил
.
источник

Е

Егорка in React — русскоговорящее сообщество
Что-то все равно не получается
источник

Е

Егорка in React — русскоговорящее сообщество
prevState это встроенное, или надо заменить на свой стейт?
источник

EM

Eugene Maltsev in React — русскоговорящее сообщество
источник

Е

Егорка in React — русскоговорящее сообщество
Покажу нагляднее:
        if (!this.state.selectedStationaryPoint){
         this.setState(this.state.donation => {
           ...this.state.donation, ['blood_station_id']: null
         })
       }

Есть одно условие перед отправкой данных по которому одно из полей надо обнулить, я пытаюсь сделать вот так
источник

K

Kirill in React — русскоговорящее сообщество
Владимир Молчанов
useEffect(() => {
   props.initPlaylist({новый объект})
},  [сюда все пропсы, при изменении которых должен вызываться initPlaylist])
Эх
источник

ВМ

Владимир Молчанов... in React — русскоговорящее сообщество
Kirill
Эх
?
источник

EM

Eugene Maltsev in React — русскоговорящее сообщество
Егорка
Покажу нагляднее:
        if (!this.state.selectedStationaryPoint){
         this.setState(this.state.donation => {
           ...this.state.donation, ['blood_station_id']: null
         })
       }

Есть одно условие перед отправкой данных по которому одно из полей надо обнулить, я пытаюсь сделать вот так
this.setState(prevState => {
           ...prevState, ['blood_station_id']: null
         })
источник

Е

Егорка in React — русскоговорящее сообщество
ругается на prevState
источник

Е

Егорка in React — русскоговорящее сообщество
Eugene Maltsev
this.setState(prevState => {
           ...prevState, ['blood_station_id']: null
         })
Что делать, если ...prevState ему не нравится?
источник

EM

Eugene Maltsev in React — русскоговорящее сообщество
Егорка
Что делать, если ...prevState ему не нравится?
а там return надо добавить)
источник

Е

Егорка in React — русскоговорящее сообщество
Eugene Maltsev
а там return надо добавить)
А как?
источник

EM

Eugene Maltsev in React — русскоговорящее сообщество
[In reply to Егорка]
this.setState(prevState => ({
           ...prevState, ['blood_station_id']: null
         }))

или так

this.setState(prevState => {
return {
...prevState, ['blood_station_id']: null
})
источник

EM

Eugene Maltsev in React — русскоговорящее сообщество
🤔я кстати не уверен, обязательно ли возвращать весь prevState- мб достаточно только измененного
источник