Денормализовать с нормализром - PullRequest
0 голосов
/ 09 мая 2018

Я пытаюсь денормализовать некоторые данные из состояния избыточности, но не могу заставить их работать. Я попытался соединить функцию денормализации всеми возможными способами. Это игра в догадки, и до сих пор ничего не получалось.

Сначала я нормализую данные о продукте и приведу их в состояние. Объекты вводятся в 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», либо к вышеуказанной ошибке.


Редактировать : нашел ошибку - добавил ее ниже

1 Ответ

0 голосов
/ 10 мая 2018

Я обнаружил ошибку - одна из моих схем была неправильной: я создал new schema.Entity('shippingZones'), но в редукторе я добавил его в состояние с другим именем:

shipping_zones: action.payload.shippingZones

Так что он искал "shippingZones", в то время как были только "shipping_zones", я думаю. Поэтому я изменил его на new schema.Entity('shipping_zones') и shipping_zones: action.payload.shipping_zones

Жаль, что в сообщении TypeError: entities[schemaKey] is undefined не могло быть указано "shippingZones", тогда я мог бы сэкономить несколько дней.

Итак, этот код сработал в конце:

const entities = state.data.products; 

return denormalize( 
        productId, 
        productSchema,
        entities
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...