react的redux有必要用normalizr吗?

react有必要用normalizr进行数据规格化吗?感觉不用也能进行数据的修改,没啥问题。我平时都用lodash的assign和merge进行合并,state = _.merge({},state,{...}},感觉多复杂的嵌套都能没问题,用了normalizr感觉复杂了?

阅读 6.7k
5 个回答

没有一定必要,如果目前用的顺手就可以了。
normalizr库是在复杂的JSON格式巢状数据模型场合使用的。

不存在一定要用的说法,normalizr的很重要的一个作用就是把杂糅在一起的对象分开,变的更加清晰。

比如下面这样这两段json,同样是获取一篇文章的数据

  • 没有normalizr

{
  "id": "123",
  "author": {
    "id": "1",
    "name": "Paul"
  },
  "title": "My awesome blog post",
  "comments": [
    {
      "id": "324",
      "commenter": {
        "id": "1",
        "name": "Paul"
      }
    }
  ]
}
  • 有normalizr

{
  result: "123",
  entities: {
    "articles": { 
      "123": { 
        id: "123",
        author: "1",
        title: "My awesome blog post",
        comments: [ "324" ]
      }
    },
    "users": {
      "1": { "id": "1", "name": "Paul" }
    },
    "comments": {
      "324": { id: "324", "commenter": "1" }
    }
  }
}

是不是各个对象都清晰的区分开了?也用引用的方式去除了重复数据,例如user:Paul

离开业务逻辑谈架构都是耍流氓,用不用normalizr要看你的store设计模式能不能支撑目前的业务逻辑以及未来的功能扩充。大部分(可能仅是我认为的大部分)前端项目是后台提供数据,前端做数据展示,基本用不上normalizr。但是部分项目,比如电路图编辑器(《领域驱动设计 软件核心复杂性应对之道》作者就曾经用这类项目举例),需要前端做建模,设计类图。这种项目里面有大量的类和对象(这些类和对象都是前端处理),这时候我们其实想要一个前端关系型数据库,而且还得能放进redux里面,该数据库要有索引(加快查询速度),符合数据库范式(增删改查数据不会产生副作用)。此时,normalizr就需要使用了

看具体场景,不过我从来没遇到过需要的

没有必要用吧!我反正不用,其次react可以用react-redux,这个非常的简单,稍微配置一下就可以用了!

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题