Нормализация моего JSON-ответа с использованием нормализатора с избыточным - PullRequest
0 голосов
/ 19 октября 2018

Я пытаюсь изменить свое хранилище Redux, чтобы я мог легко запрашивать и фильтровать свои данные.

У меня есть конечная точка API, которая возвращает заказ обратно.Порядок выглядит следующим образом на высоком уровне:

Order
 + references
    + item_details
       - category_id
       - product_id
       - product

Таким образом, у заказа много ссылок, а у ссылок много item_details.Детали товара имеют категорию и продукт.

  const data = {
    id: 3939393,
    discount: 0,

    references: [
    {
      id: 123,
      order_id: 3939393,
      name: "order 1",
      item_details: [
        {
          id: 100,
          order_id: 3939393,
          product_id: 443,
          sort_order: 1,
          category_id: 400,
          product: {
            id: 443,
            name: "hello world",
            price: 199
          }
        },
        {
          id: 200,
          order_id: 3939393,
          product_id: 8080,
          sort_order: 2,
          category_id: 500,
          product: {
            id: 8080,
            name: "hello json",
            price: 299
          }
        }
      ]
    }
  ]
};

export default data;

Пока мои определения схемы выглядят так:

export const productSchema = new schema.Entity("products");
export const itemDetailSchema = new schema.Entity("itemDetails", {
  product: productSchema
});
export const references = new schema.Entity("references", {
  item_details: new schema.Array(itemDetailSchema)
});
export const orderSchema = new schema.Entity("orders");

const result = normalize(data, orderSchema);

console.log("result is: " + JSON.stringify(result));
  1. Как я могу получить продукты в своем собственном разделе внормализованный JSON?В настоящее время продукты по-прежнему встроены в JSON.

Если бы я использовал normalizr для создания состояния, «индексный» тип выглядит следующим образом:

productsInReferences: {
  123: [400, 8080]
}

Если нет, то какименно для того, чтобы сгенерировать эти типы поиска в формате JSON?

До сих пор я создал коды и коробку с моим кодом.https://codesandbox.io/s/xpl4n9w31q

1 Ответ

0 голосов
/ 15 ноября 2018

Я обычно думаю, что схемы нормализации от самой глубокой вложенной структуры до той, которая содержит данные для этих случаев.Помните, что вы можете сделать явное определение массива через [someSchema], также каждый уровень должен содержаться во вложенной схеме, в этом случае вы забыли references: [referenceSchema] в orderSchema.

Правильная нормализация будет:

// Product Schema
const productSchema = new schema.Entity("products");
// Item detail schema containing a product schema OBJECT within the property product
const itemDetailSchema = new schema.Entity("itemDetails", {
    product: productSchema
});
// Reference schema containing an ARRAY of itemDetailSchemes within the property item_details
const referenceSchema = new schema.Entity("references", {
    item_details: [itemDetailSchema]
});
// Order schema containing an ARRAY of reference schemes within the property references
const orderSchema = new schema.Entity("orders", {
    references: [referenceSchema]
});


const result = normalize(data, orderSchema);
console.dir(result);

Это будет результат после нормализации.

Object
    entities:
        itemDetails: {100: {…}, 200: {…}}
        orders: {3939393: {…}}
        products: {443: {…}, 8080: {…}}
        references: {123: {…}}
    result: 3939393
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...