Как получить данные localStorage при запуске приложения React и сохранить их в Redux с помощью useEffect?(Он продолжает стирать мои данные) - PullRequest
0 голосов
/ 20 сентября 2019

Редактировать: возможно, мне не следует объединять хуки React и mapStateToProps в одном приложении, а вместо этого использовать хуки Redux (useSelector и т. Д.)?

В моем приложении React у меня есть массив данных «друга»в Redux.Я использую useEffect в одном из своих компонентов для сохранения этих данных в браузере localStorage каждый раз, когда они меняются.

// 'friends' is an array from Redux store,
// storeManyFriends is an action creator that will store to Redux
  const {friends, storeManyFriends} = props;

// store 'friends' to local storage each time it changes
useEffect(() => {
    try {
      persistData(friends,'my friends') // stores to local storage
    } catch (e) {
      console.log('error persisting data',e.message)
    }
  }, [friends]);

Я хочу загрузить эти данные из localStorage при запуске приложения (если оно существует) и сохранить их в Redux, используя useEffect.

useEffect(() => {
// get stored 'friends' from local storage on component mount
    const storedFriends = retrievePersistedData('my friends') 
    if (storedFriends) {
      try {
        storeManyFriends(storedFriends)
      } catch (e) {
        console.log('error retrieving data',e.message)
      }
    }
   }, []);

Проблема заключается в том, что при перезапуске приложения вызывается первый useEffect с пустым массивом friends, который затем сохраняется в localStorage, уничтожая то, что там есть.Я мог бы проверить, является ли массив пустым, прежде чем сохранить его, но иногда массив будет пустым, потому что у кого-то нет друзей, и я бы хотел сохранить это пустое значение.Каков наилучший способ справиться с этим?

Для справки, начальное состояние хранилища Redux будет

export const originalState = {
  friends: [],
};

1 Ответ

0 голосов
/ 20 сентября 2019

Существует 3 сценария:

  • без ключа в localStorage
  • пустой массив
  • массив с данными

При получении, сначала создайте пустой массив, если он еще не существует.Это гарантирует, что при сохранении у вас всегда будет ключ (с пустым массивом).

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