Как установить State из локального хранилища в реаги? - PullRequest
0 голосов
/ 28 февраля 2019

У меня SiteData хранится в другом файле, и я хочу установитьState на эти данные, когда пользователь посещает веб-сайт в первый раз, чем когда он / она вносит изменения в веб-сайт, я хочу сохранить его в localalstorage и когда пользователь снова посещает веб-сайт, яхочу, чтобы они показывали им предыдущие изменения.Поэтому я не хочу получать данные из файла SiteData.Я делаю это в жизненном цикле componentWillMount.

componentWillMount() {
  localStorage = JSON.parse(localStorage.getItem('SiteData'));
  if (ls === null) {
    this.setState({
      MyData: SiteData
    });
    localStorage.setItem('SiteData',JSON.stringify( this.state.MyData));
  }
  else {
    console.log("ls");
    this.setState({
      MyData: ls
    });
  }
}

Я получаю эту ошибку:

Инвариантное нарушение: недопустимый тип элемента: ожидается строка (для встроенных компонентов) иликласс / функция (для составных компонентов), но получил: undefined.Вы, вероятно, забыли экспортировать свой компонент из файла, в котором он определен, или вы перепутали импорт по умолчанию и имена.

PS: Я правильно экспортировал SiteData (экспортировать данные SiteD по умолчанию)

Ответы [ 2 ]

0 голосов
/ 12 марта 2019

Я только что понял, что у меня была совершенно другая проблема, когда я пытался сохранить данные в локальном хранилище, которое зависело от других компонентов.Таким образом, локальное хранилище игнорировало эти зависимости, и из-за этого, когда я использую данные локального хранилища в состоянии, я получил эту ошибку.Решил это, сделав несколько изменений в SiteData.Спасибо всем за помощь.

0 голосов
/ 12 марта 2019

По-видимому, вы связываете одно имя ('localStorage'), но затем ссылаетесь на совершенно другое имя ('ls').В представленном вами фрагменте «ls» никогда не привязывается и всегда будет undefined.

. Это лучше для вас?

componentWillMount() {
  localStorage = JSON.parse(localStorage.getItem('SiteData'));
  if (localStorage === null) {
    this.setState({
      MyData: SiteData
    });
    localStorage.setItem('SiteData',JSON.stringify( this.state.MyData));
  }
  else {
    console.log("localStorage");
    this.setState({
      MyData: localStorage
    });
  }
}
...