【问题标题】:ImmutableJS not working with new custom object instanceImmutableJS 不适用于新的自定义对象实例
【发布时间】:2016-09-02 10:44:57
【问题描述】:

在原始 JS 对象上使用 Immutable.fromJS() 可以按预期工作并返回一个 Map,但尝试对从构造函数获取的自定义对象执行相同的 Immutable.fromJS() 不起作用

意思:

  • {/*1*/}: console.log 返回自定义对象。
  • {/*2*/}: console.log 返回相同的自定义对象,即使我使用了Immutable.fromJS()
  • {/*3*/}console.log 返回自定义对象。
  • {/*4*/}console.log 返回 map = Immutable.fromJS(),正如预期的那样。

我在文档中找不到任何解释。

{/*EXPORTING CONSTRUCTOR*/}
export function MyObject() {
  this.id = null;
  this.name = '';
}

{/*EXPORTING RAW OBJECT*/}
export my_object = {
  this.id = null;
  this.name = '';
}

//in another file
//importing, and than:

let myConstructedObject = new MyObject();
let myRawObject = my_object;

{/*1*/} console.log(myConstructedObject) // => object
{/*2*/} console.log(Immutable.fromJS(myConstructedObject)) // => object ?!?!

{/*3*/} console.log(myRawObject) // => object
{/*4*/} console.log(Immutable.fromJS(myRawObject)) // => map (OK!)

【问题讨论】:

  • 如果你不关心性能,你可以试试 Immutable.fromJS(JSON.parse(JSON.stringify(myConstructedObject)))。
  • 我很关心性能和可读性; ) 所以感谢您的建议,但我宁愿不使用上述方法。最好的!

标签: javascript constructor immutability immutable.js


【解决方案1】:

我认为这个话题中的人:How do I make a custom immutable type using facebook/immutable-js? 实际上是从建设性的角度讨论同一个问题。

总结该讨论,您不能只是“Immutivize”自定义对象,但您可以使用 Immutable.Record(使用纯 ImmutableJS)或 Map(使用 'extendable-immutable' 库。 )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-04
    • 1970-01-01
    • 2023-03-08
    相关资源
    最近更新 更多