如何在React的构造函数中处理Null Props

时间:2018-01-29 11:01:23

标签: javascript reactjs ecmascript-6

我有一个表单,所以一个典型的表单将有编辑和创建,我没有创建的问题,现有数据从主容器传递,每个组件通过道具并分配给他们自己的状态,如此

export default class Name extends Component {

  constructor(props){
    super(props)
    const { data } = props

    this.state = {
      name: data.name
    }
  }

  ...
  ...
}

如果我遇到创建问题,如果<Name />呈现没有数据道具,则上面的代码会出错。如何解决这个问题?我能做到

this.state = {
    name: data && data.name
}

但想象一下,我有其他领域,这不是一个优雅的解决方案。

1 个答案:

答案 0 :(得分:1)

可以使用defaultProps 将 道具值设置为默认值: -

    export default class Name extends Component {
      static defaultProps = {
            name: "name default value",
            email: "email default value"  
          };

          constructor(props) {
            super(props);
            this.state = {
             name: this.props.name,
             email: this.props.email,
             // some other variables

            };
          }
...... ..........
...... ..........
}

您可以在 componentWillReceiveProps()方法中更新道具值,此方法将在每次来自服务器或其他内容的道具值更改时执行。如下: -

componentWillReceiveProps(nextProps) {
    if (!this.props.name && nextProps.name) {
     // here you can do according to your need
     // you can update the values of variables in state here 

    this.setState({ name: nextProps.name });

    }
  }