代码之家  ›  专栏  ›  技术社区  ›  dube

避免使用带有不可变映射的JS映射

  •  2
  • dube  · 技术社区  · 6 年前

    如何避免本地映射与不可变的.map混淆?

    我用 immutable.js 在一个反应项目中(ES6或更高版本,与Babel一起开发)。 所以很多文件都是从导入开始的,比如:

    import { Map } from 'immutable';
    

    在有人将上述导入添加到使用 native JS Map ,这样 new Map() 成为一个 Immutable.Map .

    因此我可以导入整个不变的库( import Immutable from 'immutable'; )并使用 不变的地图 . 但是,这可能会影响结果代码的大小(编译器可能无法确定是否使用了整个导入的lib),并且可能看起来不太好。

    有更好的解决方案吗?我可以具体地引用本地JS映射吗?

    2 回复  |  直到 6 年前
        1
  •  3
  •   Jared Smith    6 年前

    这里有两种选择。我喜欢第一个,但YMMV。

    1. 本机JavaScript模块允许您不仅别名整个库导入,而且 individual named imports : import {Map as IMap} from 'immutable'; .现在没有冲突,您的包大小应该更小。额外的好处:对于未来的维护人员来说,您的代码的意图可能会变得更加清晰,他们现在会立即知道他们没有处理普通的本地地图。

    2. 实际的构造函数是全局上下文的属性:仅引用 window.Map 这不会与您导入到模块命名空间中的冲突。

        2
  •  1
  •   Tom M    6 年前

    我建议要么导入高阶组件中的映射,然后将其作为属性传递给组件,要么使用 import alias (如@jared smiths答案中所建议的)

    高级组件

    import { Map } from 'immutable';
    
    
    class HigherOrderComponent extends React.Component { 
        render() {
            return <myChildComponent map={Map} />;
        }
    }
    

    mychild组件

    class HigherOrderComponent extends React.Component { 
        componentDidMount () {
            this.myMap = new this.props.Map();
        }
        render() {
           // ...
        }
    }