使用Flow处于React状态的嵌套对象

时间:2017-07-25 14:01:57

标签: javascript reactjs flowtype

我有一个关于带流程的嵌套状态对象的问题......

所以假设我想在我的React组件中的状态中的对象内部使用条件参数close

class Appearance extends React.Component {
  state: {
    house: {
      open: number,
      close?:number,
    },
  };
  constructor(props) {
    super(props);
    const house = {
      open: 0,
    };
    if (props.door) {
      house.close = 0;
    }
    this.state = {
      house,
    };
  }

这似乎给我一个错误close. Property not found in object literal 我做错了什么或者我可以用另一种方式做到这一点吗?

1 个答案:

答案 0 :(得分:2)

您正在使用const house = { open: 0 };

创建一个密封的对象文字

从流程文档中检查Sealed object types

尝试

let house = { };
house.open = 0;
if ( props.door ) {
  house.close = 0;
}

或...您可以使用Object.assign并将其保存为密封对象

const house = Object.assign({}, 
  {open: 0},
  props.door ? {close: 0} : null
);

注意:Flow不允许您使用

const house = Object.assign({}, 
  {open: 0},
  props.door && {close: 0}
);

因为props.door && {close: 0}成为布尔值而Flow不支持