首页 文章

无法将模式从Normalizr v2转换为v3

提问于
浏览
0

我刚刚更新到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 middleware,所以我将模式连接到我的动作,如下所示:

import { usersSchema } from '../normalizrSchemas/usersSchemas.js'
import { arrayOf } from 'normalizr'

export function getUsers(data) {
  return  {
    type: 'GET_USERS',
    payload: data,
    meta: {
      schema : arrayOf(usersSchema)
    }
  }
}

这是我第一次尝试转换架构 . 它似乎不能调用schema.Array你可以使用 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,normalizr应该选择 . 我正在努力弄清楚如何让normalizr识别它是我认为的一个对象数组 .

1 回答

  • 2

    schema.Array 不接受密钥字符串名称(docs) . 第一个参数应该是模式定义 . 而不是

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

    你应该使用:

    const users = new schema.Array(user)
    

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

    const users = [ user ];
    

相关问题