【问题标题】:The pros/cons of React class property initializersReact 类属性初始化器的优缺点
【发布时间】:2018-05-27 14:51:25
【问题描述】:

使用 React,我知道你可以像这样初始化组件状态:

class Foo extends Component {
  constructor() {
    super();

    this.state = { count: 0 };
  }
}

如果 state 需要用 props 初始化:

class Foo extends Component {
    constructor(props) {
        super(props);

        this.state = { this.props.count: 0 };
    }
}

但是,使用transform-class-properties 插件,您可以像这样初始化状态:

class Foo extends Component {
    state = { count: 0 };
}

由于this在构造时指的是class下的实例,所以初始状态仍然可以使用props:state = { this.props.count: 0 }

除了行数更少的明显好处之外,我还想知道这种语法有哪些优点/缺点。

*示例不包括类方法的绑定,因为我知道在使用粗箭头语法声明这些方法时可以完成绑定。

【问题讨论】:

    标签: javascript reactjs


    【解决方案1】:

    优点:

    • 更少的代码,更多的隐含

    缺点:

    • 您不能像构造函数那样进行任何逐步计算

    例如

    constructor(props){
      super(props)
    
      const z = props.x - props.y;
      const g = props.a + props.b;
      const total = z ** g;
      const shouldBeOpened = total > 1000;
    
      this.state = {
        shouldBeOpened,
        initialSomething: z > g,
      }
    }
    

    【讨论】:

    • 但是您也可以将该逻辑包含在类方法中,不是吗?并在状态中调用该方法,如下所示:initialSomething: this.shouldBeOpened(z, g)
    • 我不确定它们是否会在那时被初始化。
    • 是的,你是对的。我自己试过了。由于您在类方法之前声明状态的顺序,类方法未初始化。你要么使用构造函数,要么在类之外声明这个方法
    猜你喜欢
    • 2016-06-17
    • 2021-11-21
    • 1970-01-01
    • 2017-09-29
    • 1970-01-01
    • 2020-03-05
    • 2018-09-11
    • 2011-08-21
    • 2016-01-12
    相关资源
    最近更新 更多