Я использую реакцию с архитектурой потока, и у меня есть проблема, с которой я сталкиваюсь.
Мне нужно создать действие, которое получает идентификатор пользователя и выбирает пользователя. Вот код:Должны ли действия разговаривать с магазином?
var createAction = require('common/scripts/actions-helpers/create-action'),
resource = require('common/scripts/resources/conversation');
module.exports = createAction(fetchAction);
function fetchAction(context, payload, success, failure) {
resource.sync(context, payload.userId)
.then(function(user) {
context.dispatch('USER_FETCH', user);
success();
}, failure);
}
Я хочу использовать магазин, который будет кэшировать все пользователи так и в случае, если пользователь принес перед тем, действие не будет выполнять бэкэнд вызов. Новое действие должно выглядеть:
function getFetchedUser() {
// <--------- HOW TO KNOW WHETHER USER FETCHED?
}
function fetchAction(context, payload, success, failure) {
var user = getFetchedUser();
if (user) {
context.dispatch('USER_FETCH', user);
success();
} else {
resource.sync(context, payload.userId)
.then(function(user) {
context.dispatch('USER_FETCH', user);
success();
}, failure);
}
}
проблема в том, что я не хочу, чтобы управлять данными пользователей в действии, так что единственный способ прийти на мой взгляд, для реализации getFetchedUser() проверяет в магазине пользователей ,
Это хороший подход?
Можно ли получить доступ к хранилищу?
Это не ответит на вопрос, так как он сделает внутренний вызов, даже если данные уже существуют в магазине или нет. –
Нужно ли проверять, был ли пользователь, которого я дважды набирал? Если вы выберете пользователя, вы можете исправить это изменение и отправить пользовательские данные соответствующему компоненту. Часто ли нужны данные для обновления? Вы не должны сообщать об этом прямо в магазин. Эта свободная связь является одной из ключевых концепций React. Часто компоненты и реквизиты компонентов определяют, получили ли они правильные данные, а затем запускают действия по их сбору. – magnudae
Ой не видел, что ты не был аскером. Вы можете игнорировать первый вопрос в моем комментарии. – magnudae