Я только что обновил до normalizr версии 3.1.x, чтобы использовать денормализацию. Хотя они значительно изменили свой API. У меня возникли проблемы с переносом моих схем.Ошибка при преобразовании схемы из Normalizr v2 в v3
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-normalizr middleware внутри моей Redux действия, поэтому я подключил схему для моего действия, как это:
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. Все данные пользователей просто сбрасываются в результаты без какой-либо нормализации. Данные представляют собой список объектов пользователя, и каждый объект содержит идентификатор, который normalizr должен забрать. Я изо всех сил пытаюсь понять, как добиться нормализации идентификации, что это массив объектов, которые я думаю.
СММ. он sems ему не понравилось сокращение, выплевывая 'index.js: 179 Uncaught Error: Normalize принимает объект для schema.'. Хотя он принял длинную форму 'new schema.Array (provider)'. Тем не менее, все пользовательские объекты все еще сбрасываются в массив результатов, а сущности пусты. Я устал, чтобы упростить свой код, удалив фотографии и телефоны. Может быть, я найду дополнительную информацию в документах. – DigitalDisaster
Ну, похоже, может быть, только что redux-normalizr просто не совместим с версией 3. При использовании 'normalize' в моем редукторе со схемой работает нормально. Жаль, что мне нужно избавиться от промежуточного ПО, но я очень рад использовать normalizr v3! Спасибо! – DigitalDisaster