Установить начальное состояние с использованием локального / сеансового хранилища в приложении реакции

Я хочу инициировать свое состояние с использованием локального / сеансового хранилища. Верен ли такой подход? Я пробовал, но выдает ошибку. Если нет, то как я могу получить значение из хранилища непосредственно в свое состояние?

constructor(props) {
super(props);
      sessionStorage.setItem('testkey','test value')
      this.state = {
            abc: sessionStorage.getItem('testkey')
       }
}

Ошибка всегда неопределенная.

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

constructor(props) {
super(props);
      this.state = {
          abc: this.getItems(val)
      }
     this.getItems = this.getItems.bind(this);
}

getItems(value){
   let selectedItem =  value;
   return selectedItem;
}

Но когда я это делаю, этого не происходит. Я просто не могу получить значение из своего хранилища сеансов.

   constructor(props) {
    super(props);
          this.state = {
              abc: this.getItems(val)
          }
         this.getItems = this.getItems.bind(this);
    }



 getItems(val){
       let setItem = sessionStorage.setItem('testkey', val);
       let getItem = sessionStorage.getItem('testkey');
       return getItem;
    }

Когда я регистрирую getItem на своей консоли, он дает мне объект. В чем может быть проблема?

В чем ошибка?

Aron 18.04.2018 16:20

удалить точку с запятой после abc: sessionStorage.getItem('testkey');

Igor Alemasow 18.04.2018 16:21

В вашем примере вы можете просто установить состояние abc на тестовое значение. Нет никакой пользы от записи в хранилище. Но скажем, вы получаете значение откуда-то еще, тогда вы можете установить его таким образом в функции и получить в своем конструкторе. Тогда ваш подход будет действительным.

Ali Ankarali 18.04.2018 16:22

Какую ошибку вы получили? Какая строка вызвала ошибку?

Code-Apprentice 18.04.2018 16:33

Я обновил вопрос, пожалуйста, проверьте и извините за задержку.

Vinay Singh 18.04.2018 22:04

почему бы вам просто не обновить значение свойства в состоянии?

A H Bensiali 18.04.2018 22:13

Я пытался. Тоже не работает. Проблема сохраняется, когда я пытаюсь получить значение из sessionStorage.

Vinay Singh 18.04.2018 22:16
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
1
7
1 414
1

Ответы 1

Я все еще не совсем понимаю, что вы имеете в виду, но вам определенно нужно использовать this.setState ().

эта функция принимает json {'key': 'value'} после установки обновляет состояние. На самом деле вам не нужно хранить функцию в состоянии.

Я не знаю, использовались ли здесь геттеры и сеттеры. Установите значения переменных с помощью setState, затем извлеките их с помощью this.state. [Имя_переменной].

Надеюсь это поможет.

class Session extends Component {
  constructor(props){
    super(props);
    this.setValue = this.setValue.bind(this);
    this.state = {};
  }

  setValue(key, value){
    let data = {};
    data[key] = value;
    this.setState(data);
  }

  render() {
    let session = this.state.session;
    return (
      <div >
        <div>{ session }</div>
        <input onClick = { ()=> this.setValue('session','Hello') } type = "button" value = "Click Me" />
      </div>
    );
  }
}

export default Session;

Удачного кодирования.

Другие вопросы по теме