如何设置默认值

How to set a default value

下面是我如何扩展 Immutable.Record

import Immutable from 'immutable';

const DATA_DEFAULTS = {
  id: String,
  data: String,
  ref_id: String,
};

export default class Data
  extends Immutable.Record(DATA_DEFAULTS) {} 

如果 json 表示不包含 ref_id,那么当我尝试在 Chrome devtool 的控制台中打印该字段的值时,我将得到:

> data.ref_id
String() { [native code] }

我认为这就是我无法过滤掉列表中 ref_id 为空的实体的原因

a = [] // a list of data
b = a.filter(x => x.ref_id != '')  // b is the same as a

我想它可以通过以下任一方式修复:

对于第二种方法,我已经尝试过,例如 data.has('ref_id'),它总是报告 true,无论该字段是否具有任何有效值。

我的问题:

1) 我可以在 Immutable.Record 中设置默认值吗?

2) 如何筛选 Immutable.Record

中可能存在或不存在的字段

3) 在 Immutable.Record 的实例中测试字段中是否存在有效值的正确方法是什么?

您明确地将每个字段的默认值设置为 函数 StringString 在这里不是数据类型,如果那是您的想法。你似乎想要的是

const DATA_DEFAULTS = {
  id: '',
  data: '',
  ref_id: '',
};

1) Can I set a default value in a Immutable.Record?

正如您所做的那样,您只需要设置正确的默认值即可。


2) How to filter on field that may or may not exist in the Immutable.Record

记录中的字段始终存在。来自 docs:

Records always have a value for the keys they define. removeing a key from a record simply resets it to the default value for that key.


3) What is the right way to test the existence of valid value in a field in an instance of Immutable.Record?

您可以使用您知道不会明确分配给该字段的默认值。这可能是 null 或一个符号。