Использование setState для установки всего состояния реагирующей страницы - PullRequest
0 голосов
/ 31 августа 2018

У меня есть страница, на которой я собираюсь взять все состояние страницы и установить его с некоторым локальным хранилищем, поэтому мне нужно использовать SetState, но не использовать какое-либо свойство, как это делают нормальные люди

Нормальные люди

this.setState({ 
  stateProperty:someValue
})

Я (чего я хочу достичь)

this.setState({
  this.state: {someValues}
})

Ответы [ 3 ]

0 голосов
/ 31 августа 2018

Нет, нет. Извините, вы не можете. Вы приняли себя так, как нравятся нормальные люди, но почему вы пытаетесь сходить с ума?

Лучше сохранить данные localStorage с указанным состоянием:

state = {
  storeData: {} // or, [], or whatever your stored data type
}
componentDidMount() {
  const storeData = JSON.parse(localStorage.getItem('store-data'))
  this.setState({
     storeData
  })
}

Некоторые люди могут предложить вам инициализировать данные localStorage непосредственно в конструкторе. Но я против, потому что я не люблю вызывать побочные эффекты для компонента.

PS: на самом деле нет никакого побочного эффекта при использовании данных localStorage в конструкторе. Я только что предложил использовать componentDidMount hook, потому что вам может потребоваться вызвать некоторый API, который будет вызывать загрузку данных localStorage, и в этот раз у вас может возникнуть побочный эффект. Чтобы игнорировать это, используйте componentDidMount hook, потому что это асинхронная функция, которая работает в фоновом режиме.

0 голосов
/ 01 сентября 2018

Похоже, вы можете вызвать this.state = {что-то} в конструкторе

Это сделало трюк

constructor(props) {
        super(props);

          if ( typeof store.get([store.get("auth").ID]) === "undefined") {
              store.set([store.get("auth").ID], { localStorageData: {} });
          }

          this.state = {
              ...bla bla bla
          }

          this.state=Object.assign({}, this.state, this.state.localstore ) 
   }
0 голосов
/ 31 августа 2018

Может быть, вы могли бы сделать что-то вроде этого:

const updateState = window.localStorage.getItem('whatever');
let newState = Object.assign({}, this.state);
newState = updateState;
this.setState({newState});

Надеюсь, что это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...