1

我正在尝试实现 redux-orm,但不确定在我的模型上处理更新元属性的最佳方法。静态减速器的返回值在最新版本中被忽略了,通过 API 看,我看不到任何方法可以从静态减速器函数内部的模型中修改元属性。

IE,对于标准实体状态更新,这是来自repo的示例:

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 实现的例子,但这些都是旧版本的。我可以制作一个兄弟 reducer 来处理这个问题,但我更希望一切都在我的实际 ORM 实体上,并利用提供的元属性。

如果有人有一个使用最新版本的 redux-orm 实现元缩减器的简单示例,将不胜感激。

谢谢!

4

1 回答 1

1

基本上,您必须确保您的模型包含一个密钥(在下面的示例中type),该密钥允许您轻松检索session每个资源的正确存储。

然后使用 meta reducer 进行基本的 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
}
于 2018-06-07T15:26:51.087 回答