Как вы обновляете магазин Redux на всех устройствах, на которых запущено собственное приложение реагирования? - PullRequest
0 голосов
/ 08 апреля 2020

В собственном приложении с несколькими пользователями на отдельных устройствах есть некоторые данные, которые различаются в зависимости от того, какой пользователь вошел в систему, и других данных, которые должны быть обновлены для всех пользователей на всех устройствах. Например, если пользователи могут отправлять сообщения, они должны иметь возможность просматривать и редактировать свои собственные сообщения при входе в систему, и эти данные будут отличаться в зависимости от того, какой пользователь вошел в систему на устройстве. Принимая во внимание, что объект, содержащий все сообщения, должен быть обновлен для приложения / устройства каждого пользователя.

export default reducer = combineReducers({
    posts: postsReducer, // same for all users on all devices
    user: userReducer, // different depending on user on specific device
})

Я относительно новичок в Redx, и я понимаю, что store.dispatch обновляет магазин приложения локально, только на текущем устройство. Однако я хочу знать, как обновлять данные для каждого устройства, на которое загружено приложение.

1 Ответ

1 голос
/ 08 апреля 2020

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

Итак, ваш пользовательский редуктор может выглядеть примерно так:

type StatePerUser = {
    editPost: boolean,
    createPost: boolean,
};

type UserState = {
    user: { [userId: number]: StatePerUser },
    seePosts: boolean
};

const INITIAL_STATE = {
    user: {} // The key-value map for different users. Empty by default, you'll need to populate it when someone does login. 
    seePosts: true // All users should see posts
};

export default function reducer(state: UserState = INITIAL_STATE, action: *) { ... }

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

  • Пользователь выполняет вход в систему, запись добавляется в редуктор пользователей внутри user map (вы можете найти более подходящие названия для этих переменных) с идентификатором пользователя, выступающим в качестве ключа, и желаемым объектом прав доступа в качестве значения. (значения поступают с вашего сервера)
  • Тогда просто, когда вы хотите проверить, имеет ли какой-либо пользователь какое-то конкретное c разрешение / разрешено что-то делать, просто проверьте карту разрешений user, например user[<CURRENT_USER_ID>].<PERMISSION_NAME> и посмотрите, разрешено ли ему делать эту операцию.

В качестве примечания, я бы, возможно, разделил бы это на 2 редуктора, один редуктор user, содержащий информацию о в настоящий момент зарегистрированном в пользователя, и другой редуктор, возможно, называется permissions/rights, где будет храниться вышеуказанная информация.

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