【问题标题】:How to read an immutable record which is inside immutable list?如何读取不可变列表中的不可变记录?
【发布时间】:2018-03-11 18:30:32
【问题描述】:

我可以独立读取不可变列表和不可变记录。但是我有一个不可变的记录,它嵌套在我无法读取的不可变列表中。

不可变列表:

let listObj = Immutable.List([{a:'0', b:'1'}, {c:'2', d:'3'}])
console.log('listObj', listObj._tail.array[0]); // {a:'0', b:'1'}

不可变记录:

const Person = Immutable.Record({
  name: null
}, 'Person')

let me = Person({ name: 'Steve' })
me.toString() // "Person { "name": "My Name" }"
let myName = me.get('name')
console.log('myName', myName) // "Steve"

不可变列表中的不可变记录:

    let x = Immutable.List([Immutable.Record({
        name: 'Steve'
    })])

    console.log('x', x) // undefined

如果有的话,您能否给出一些指示,以了解如何读取嵌套在不可变列表中的不可变记录?

谢谢!

【问题讨论】:

  • console.log('x', x) // undefined?这很难相信。 x 是上面直接定义的,所以它不能是未定义的;和x.get(0) 应该给你那个记录。 – 你能尝试使用snippets 生成完整的minimal reproducible example 吗?

标签: javascript immutable.js


【解决方案1】:

如果您尝试实际运行您的代码:

let x = Immutable.List([Immutable.Record({
  name: 'Steve'
})])

console.log('x', x) // Spoiler alert: NOT undefined
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.2/immutable.js"></script>

你会发现它输出了

x List [ function Record(values) {
  ...
} ]

注意列表中的东西是function 吗?那是因为它是 Record.Factory,而不是 Record 本身。您需要像在第二个示例中一样使用它,在该示例中创建Record.Factory,然后使用它来创建Record

const Person = Immutable.Record({
  name: null
}, 'Person')

let me = Person({
  name: 'Steve'
})

let x = Immutable.List([me])

console.log(x) // [{"name": "Steve"}]
console.log(x.get(0)) // {"name": "Steve"}
console.log(x.getIn([0, 'name'])) // "Steve"
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.2/immutable.js"></script>

【讨论】:

    猜你喜欢
    • 2017-05-06
    • 1970-01-01
    • 2017-09-06
    • 1970-01-01
    • 2020-02-17
    • 2015-12-14
    • 2014-04-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多