美文网首页
immutable.js优雅地实现深层字段访问

immutable.js优雅地实现深层字段访问

作者: secViz | 来源:发表于2018-05-09 21:20 被阅读0次

在做项目时,很多时候服务端返回的接口嵌套很深,同时每一层是否存在或者为空都是不确定的。因此,为了获得内层的字段通常需要做多次if判断来进行容错,比如下面的这个接口格式:

{
  "data": {
    "Relations": [
      {
        "Instances": [
          {
            "InstanceId": "xx",
            "EipList": ["21.107.32.xx" ]
          }, {
            "InstanceId": "xxxx",
            "EipList": ["21.107.33.xx"]
          }
         ],
        "Domain": "test.com"
      },
      ......
    ]
  }
}

现在需要取出每个 Domain为“test.com”的EipList中的IP集合,在不使用immutable的条件下,通常我们会这么去写(这里采用新语法):

let allEips = [];
if (data.Relations && data.Relations.length > 0) {
    let relations = data.Relations;
    let target = relations.find((elem) => {
        return elem.Domain === "test.com"
    });
    if (target && target.Instances && target.Instances.length > 0) {
        let instances = target.Instances;
        instances.forEach((inst) => {
            let eipList = inst.EipList;
            if (eipList && eipList.length > 0) {
                allEips.push(...eipList);
            }
        });
    }
}
allEips = [...new Set(allEips)];     // 去重
console.log(allEips);                // 输出 [ '21.107.32.xx', '21.107.33.xx' ]

现在我们引入immutable.js来处理这个问题:

import { fromJS, List, Map } from 'immutable';

const immutableData = fromJS(data);
const target = immutableData.get('Relations', List()).find(relation => relation.get('Domain') === "test.com", null, Map());
const eips = target.get('Instances', List()).map(inst => inst.get('EipList', List())).flatten(true);
const allEips = eips.toJS();
console.log(allEips);      // 输出  ["21.107.32.xx", "21.107.33.xx"]

Bingo!!! 深层嵌套不见了,整个代码架构变成了扁平化的结构,因为用immutable.js可以直接访问深层字段,并且可以在每一层设置默认值。

使用immutable.js实现深层字段访问和容错处理其实是大材小用,其真正的牛逼之处在于持久化数据结构,在使用旧数据创建新数据时,能够保证旧数据可用且不变,可以给React应用带来极大的性能提升。

有兴趣的话可以阅读下面的网站进行深入了解:
Immutable 详解及 React 中实践
immutable官方文档

相关文章

  • immutable.js优雅地实现深层字段访问

    在做项目时,很多时候服务端返回的接口嵌套很深,同时每一层是否存在或者为空都是不确定的。因此,为了获得内层的字段通常...

  • 优雅的调用RESTful API

    代码量越少越优雅,实现越简单越优雅,下面介绍如何优雅的实现API调用。 1 单资源访问 下面以华为云IoT平台提供...

  • 简短优雅地利用js实现 sleep 函数

    简短优雅地实现 sleep 函数 很多语言都有 sleep 函数,显然 js 没有,那么如何能简短优雅地实现这个方...

  • 字段访问指令

    对象创建后,就可以通过对象访问指令获取对象实例或数组实例中的字段或者数组元素。 访问类字段(static字段,或者...

  • Immutable.js

    1. 来源 Immutable.js出自Facebook,是最流行的不可变数据结构的实现之一。它实现了完全的持久化...

  • 优雅地实现CSS Animation delay

    1.需求: 等待元素A的动画加载完,再加载B元素的动画(下图中A为大熊猫,B为下方卡片) 先来看下最后的效果啦: ...

  • 如何优雅地实现分页查询

    分页功能是很常见的功能,特别是当数据量越来越大的时候,分页查询是必不可少的。实现分页功能有很多种方式,如果使用的O...

  • js更加优雅地实现异步

    概述 Javascript语言的执行环境是”单线程”(single thread)。所以异步编程对 JavaScr...

  • 如何优雅地实现策略模式

    在 XMind iOS 版开发过程中, 需要对不同的布局方式选择不同的类来进行布局,所以需要用到策略模式来处理。在...

  • 优雅简洁地实现短ID

    短ID在实际运用中很广泛, 其中比较典型的运用就是短地址。 市面上肯定有不少开源的生成短ID库, 基于node.j...

网友评论

      本文标题:immutable.js优雅地实现深层字段访问

      本文链接:https://www.haomeiwen.com/subject/qfborftx.html