Как обновить «мета» состояние модели с помощью последней версии Redx-Orm (0.9.x)? - PullRequest
0 голосов
/ 01 июня 2018

Я пытаюсь реализовать redux-orm и не уверен, что лучше всего справляться с обновлением мета-свойств в моих моделях.Возвращаемое значение статических редукторов игнорируется в последней версии, и, просматривая API, я не вижу способа изменить свойство meta из модели внутри функции статического редуктора.

IE, для стандартаОбновления состояния сущности, вот пример из репозитория :

static reducer(action, Book, session) {
    switch (action.type) {
    case 'CREATE_BOOK':
        Book.create(action.payload);
        break;
    case 'UPDATE_BOOK':
        Book.withId(action.payload.id).update(action.payload);
        break;
    case 'REMOVE_BOOK':
        const book = Book.withId(action.payload);
        book.delete();
        break;
    ... this function calls the model directly and has no return value

Я нашел пару примеров статической реализации metaReducer , но все они сстарая версия.Я мог бы сделать одноуровневый редуктор, чтобы справиться с этим, но я бы предпочел, чтобы все было на моих реальных сущностях ORM, и использовал предоставленное мета-свойство.

Если у кого-то есть простой пример реализации метаредуктора споследняя версия redux-orm была бы очень признательна.

Спасибо!

1 Ответ

0 голосов
/ 07 июня 2018

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

Затемпросто очень просто выполнять базовые операции CRUD с метаредуктором, который будет обрабатывать все ваши модели с помощью redux-orm

Вот очень упрощенный пример кода, который я использую в своем приложении с redux-orm@^ 0.9.0

export default function resourcesReducer (state, action) {
  const session = orm.session(getDefaultState(state))
  const resource = action.resource

  switch (action.type) {
    case RESOURCE_CREATE: {
      session[resource.type].create(resource)
      break
    }
    case RESOURCE_EDIT: {
      session[resource.type].withId(resource.id).update(resource)
      break
    }
    case RESOURCE_DELETE: {
      session[resource.type].withId(resource.id).delete(resource)
      break
    }
  }

  return session.state
}
...