将架构从规范化 v2 转换为 v3 时遇到问题



我刚刚更新到normalizr版本3.1.x,所以我可以利用非规范化。尽管他们已经显着更改了他们的 API。我在传输架构时遇到问题。

import { normalize, Schema, arrayOf, valuesOf } from 'normalizr';
const usersSchema =  new Schema('users')
const photosSchema =  new Schema('photos')
const phonesSchema =  new Schema('phones')
photosSchema.define({
  users: arrayOf(usersSchema)
})
phonesSchema.define({
  users: arrayOf(usersSchema)
})
usersSchema.define({
  photos: valuesOf(photosSchema),
  phones: valuesOf(phonesSchema)
})

这是我现有的用户架构。我还在我的 redux 操作中使用了 redux-normalizr 中间件,所以我将模式连接到我的操作,如下所示:

import { usersSchema } from '../normalizrSchemas/usersSchemas.js'
import { arrayOf } from 'normalizr'
export function getUsers(data) {
  return  {
    type: 'GET_USERS',
    payload: data,
    meta: {
      schema : arrayOf(usersSchema)
    }
  }
}

这是我第一次尝试转换架构。您似乎无法调用架构。数组的方式与使用 arrayOf 相同,所以我认为我需要将数组调用移动到模式中。

import { schema } from 'normalizr';
const photos = new schema.Entity('photos')
const phones = new schema.Entity('phones')
const user = new schema.Entity('user', {
    photos: [photos],
    phones: [phones]
})
const users= new schema.Array('users', user)
export { users }

操作是相同的,但是我已经删除了在arrayOf中包装架构的功能。所有用户数据都被转储到结果中,没有任何规范化。数据是用户对象的列表,每个对象都包含一个 id,规范化者应该拾取该 id。我正在努力弄清楚如何让规范化识别它是我认为的一组对象。

schema.Array不接受

键字符串名称(文档)。第一个参数应该是架构定义。所以而不是

const users= new schema.Array('users', user)

您应该使用:

const users = new schema.Array(user)

或者,您可以只使用单个实体类型的数组的简写:

const users = [ user ];

相关内容

最新更新