Я пытаюсь денормализовать некоторые данные из состояния избыточности, но не могу заставить их работать. Я попытался соединить функцию денормализации всеми возможными способами. Это игра в догадки, и до сих пор ничего не получалось.
Сначала я нормализую данные о продукте и приведу их в состояние.
Объекты вводятся в state.data.products
, включая продукты.
state.data: {
products: {
products: {
9: {
id: 9
attributes: [ 10, 45, 23 ],
things: [23, 55, 77]
},
11 //etc
}
attributes: {
10: {
id: 10
},
45: //etc
},
things: { //etc
}
}
Таким образом, есть одно свойство "продукты", которое включает в себя все объекты, и есть еще одно "продукты" для объекта "продукты".
Нормализатор работает без проблем:
normalize(data, [productSchema]);
«ProductSchema» определяется следующим образом:
productSchema = new schema.Entity('products', {
attributes: [attributeSchema],
things: [thingsSchema],
//+ other stuff
});
Теперь я хочу денормализовать продукт, например 9.
Я использую «connect» в компоненте представления для вызова этой функции, чтобы извлечь данные из состояния и денормализовать их:
export const denormalizeProduct = (state, productId) => {
const entities = state.data.products;
return denormalize(
productId,
[productSchema],
entities
);
}
Если я позвоню denormalizeProductById(state, 9)
, я верну только 9
.
(аналогично этому вопросу , но я не смог найти из него решения, и он объединяет два примера)
Если я поставлю "productSchema" без массива:
return denormalize(
productId,
productSchema,
entities
);
Я получаю ошибку: TypeError: entities[schemaKey] is undefined
.
Все, что я пробовал, приводит либо к «9», либо к вышеуказанной ошибке.
Редактировать :
нашел ошибку - добавил ее ниже