Доступ к магазину из сервиса (или где я должен был получить доступ к магазину)? - PullRequest
0 голосов
/ 10 мая 2018

Я только несколько дней (переходя из Ember), поэтому, пожалуйста, простите мое невежество.

У меня есть массив объектов (profileaccounts) в моем магазине.У меня есть много различных компонентов, которые подключены к магазину и имеют код, подобный приведенному ниже, иногда пользователь - это пользователь, вошедший в систему, иногда это пользователь, который передается в компонент (когда кто-то просматривает чужой профиль)

componentDidMount() {
    let user = this.props.user;
    let account = this.props.profiles.find(function (prof) { return prof.profile.id === user.id });
    if (account == null) {
        this.props.dispatch(userActions.getProfile(user.id));
    }
}

Это полностью работает, но я не хочу, чтобы этот код повторялся снова и снова.У меня такое чувство, что я всегда должен вызывать .getProfile(user.id), и его работа состоит в том, чтобы определить, существуют ли данные в локальном кэше (хранилище) или их нужно добавить.Если это необходимо добавить, добавьте его, а затем верните.В качестве альтернативы, возможно, пользовательский сервис (который представляет API и вызывается действиями для заполнения профилей) должен выглядеть локально, прежде чем вызовет API.Несмотря на это, я не знаю, как (или если я должен) получить доступ к хранилищу из действий или службы, только из подключенного компонента.

Я не встречал такого сценария ни в одном из руководств, которые я читал о редуксе / реакции, поэтому, если кто-нибудь сможет добавить ресурс туда, куда я должен смотреть, я буду признателен.Если я совершенно ошибаюсь в этом, я тоже был бы счастлив узнать об этом.

1 Ответ

0 голосов
/ 11 мая 2018

Вы можете использовать redux-thunk для доступа к состоянию внутри ссылки действия на thunk: https://github.com/reduxjs/redux-thunk

Код будет выглядеть так:

function incrementIfOdd() {
  return (dispatch, getState) => {
    const { counter } = getState();

    if (counter % 2 === 0) {
      return;
    }

    dispatch(increment());
  };
}

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

Ваш подход звучит хорошо ... Вы начнете с отправки действия «dispatch (getProfile (userId))», затем внутри действия вы будете делать все, что захотите, икогда у вас наконец появятся данные, которые вы хотите поместить в хранилище, отправьте еще одно действие «dispatch (storeUserProfile (profile))», которое поместит данные в хранилище через редуктор.

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