【问题标题】:Normalize data wih normalizr使用 normalize 规范化数据
【发布时间】:2018-09-20 22:35:57
【问题描述】:

我需要规范化服务器的响应,以将其保存在 redux 状态。服务器响应一个这样的数组:

[  
   {  
      "name":"parches",
      "id":1,
      "numberOfbundles":0,
      "subdirectories":[  
         {  
            "name":"satelite",
            "id":2,
            "numberOfbundles":3,
            "subdirectories":[]
         }
      ]
   },
   {  
      "name":"layout",
      "id":3,
      "numberOfbundles":0,
      "subdirectories":[  
         {  
            "name":"clientes",
            "id":4,
            "numberOfbundles":3,
            "subdirectories":[  
               {  
                  "name":"demo",
                  "id":5,
                  "numberOfbundles":3,
                  "subdirectories":[]
               }
            ]
         }
      ]
   }
]

我需要像这样获取一个规范化数据,将其保存到状态:

{  
   "entities":{  
      "directories":{  
         "1":{  
            "name":"parches",
            "id":1,
            "numberOfbundles":0,
            "subdirectories":[  
               {  }
            ]
         },
         "2":{  
            "name":"satelite",
            "id":2,
            "numberOfbundles":3,
            "subdirectories":[  ]
         },
         "3":{  
            "name":"layout",
            "id":3,
            "numberOfbundles":0,
            "subdirectories":[  
               {  }
            ]
         },
         "4":{  
            "name":"clientes",
            "id":4,
            "numberOfbundles":3,
            "subdirectories":[  
               {  }
            ]
         },
         "5":{  
            "name":"demo",
            "id":5,
            "numberOfbundles":3,
            "subdirectories":[  ]
         }
      },
   },
   "result":[  
      1,
      2,
      3,
      4,
      5
   ]
}

所有目录和子目录必须在对象实体/目录中,并且目录的 ids 必须在结果数组中。 我该怎么做?

提前谢谢你。

【问题讨论】:

    标签: reactjs redux normalizr


    【解决方案1】:
    const directory = new schema.Entity('directories')
    directory.define({ subdirectories: [directory] })
    
    normalize(data, [directory])
    

    您可以使用define 在架构中创建循环引用。

    【讨论】:

    • 它不起作用,因为返回空结果数组并且实体对象不正确。
    • 我刚刚测试过,实体对象应该是正确的,但是结果数组是你所期望的。结果数组仅包含顶级结果 id。
    • 如果你需要所有目录的id信息,你可以通过查找实体目录键来获取。
    猜你喜欢
    • 2014-07-07
    • 2016-12-06
    • 2011-02-21
    • 2011-01-21
    • 2020-07-31
    • 2016-07-23
    • 2020-01-04
    • 1970-01-01
    • 2013-12-11
    相关资源
    最近更新 更多