javascript - 如何在 normalizr 中为同一实体设置多个标识符?

标签 javascript ecmascript-6 redux normalizr es6-map

如果您有一个规范化的 redux 存储并为实体使用 id,但还有其他额外的唯一标识符并且也需要使用它们,您会怎么做。

例子

{ 
   entities: {
        users: {
           1: {
              name: 'foo',
              id: 1, //unique
              uuid: '3d89afe9-6a85-46ed-ac0d-28e10b21d09e' // unique
            },
            // ...
        }
   }
}

大部分我正在使用id属性来查找实体,但有时我只有 uuid属性(property)。

有没有办法使用更高级的模式来拥有第二个映射 uuid 的字典?至 id , 使用 es6 Map 有一个由 id 组成的键和 uuid还是我没想到的其他方式?

以下会很有用:

{ 
   entities: {
        users: {
           1: {
              name: 'foo',
              id: 1, //unique
              uuid: '3d89afe9-6a85-46ed-ac0d-28e10b21d09e' // unique
            },
            // ...
        }
        usersUuidToIdMapping: {
           '3d89afe9-6a85-46ed-ac0d-28e10b21d09e': 1
           // ...
        }   

   }
}

最好的, 法鲁克

最佳答案

如果要将 uuid 定义为 id,可以在定义实体时在 idAttribute 选项上使用字符串。

new schema.Entity('users', {}, { idAttribute: 'uuid' })

如果您想同时使用两者,idAttribute 可以是具有三个参数的函数 valueparentkey.

new schema.Entity('users', {}, {
  idAttribute: user => user.uuid ? `${user.id}-${user.uuid}` : user.id
})

更多信息在这里:https://github.com/paularmstrong/normalizr/blob/master/docs/api.md#idattribute-usage

关于javascript - 如何在 normalizr 中为同一实体设置多个标识符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48429565/

相关文章:

javascript - 在 log4javascript 中添加自定义日志级别

javascript - React - 未捕获的类型错误 : Cannot read property 'indexOf' of undefined

ecmascript-6 - 我不能在 webpack 配置文件中使用 ES6

javascript - 使用 Object.fromEntries() 深度克隆一个对象

reactjs - React router + webpack,子路由不起作用

javascript - 将用户输入限制为固定宽度和高度 contenteditable div

javascript - JQuery UI 选项卡 - 修改选项卡的链接

redux - 我怎样才能坚持嵌套的redux存储

javascript - react-redux useSelector hook 不允许将 props 直接传递给选择器

javascript - Meteor 创建一个可滚动的 div