设置初始状态记住我们传递的props是{ name:'alice' }. 但是为了getDerivedStateFromProps能够查看名称是否更改,我们必须将其镜像到我们的状态并使用prevState.name. 我们不能this在生命周期方法内部使用,因为它getDerivedStateFromProps是pure。
state = {time: 0, endtime: 0, name:'' } 
当组件安装时,将时钟设置为每秒递增 1。
componentDidMount() {
 this.setClock();
}
组件卸载时 clearInterval
componentWillUnmount() {
  clearInterval(this.clockCall)
}
setInterval将incrementClock每秒调用一次,每 1000 毫秒(1 秒)将计时器增加 1。
setClock = () => {
  this.setState({time: 0})
  this.clockCall = setInterval(() => {
    this.incrementClock();
  }, 1000)
}
这是我们设置时间状态并每秒递增的地方。
incrementClock = () => {
  this.setState((prevstate) => {time: prevstate.time + 1 })
}
如果名称更改,我们将时间保存在一个名为的新状态块中endtime,这就是我们用来显示的内容,hey alice its been ${this.state.endtime} seconds我们还将计时器重置为 0。
static getDerivedStateFromProps(nextProps, prevState) {
    if(prevState.name !== nextProps.name)
    return { time: 0, endtime:prevState.time };
    return null;
}
这里是你将如何使用这两个例子getDerivedStateFromProps相比,componentWillRecieveProps
前
class ExampleComponent extends React.Component {
  state = {
    derivedData: computeDerivedState(this.props)
  };
  componentWillReceiveProps(nextProps) {
    if (this.props.someValue !== nextProps.someValue) {
      this.setState({
        derivedData: computeDerivedState(nextProps)
      });
    }
  }
}
后 
class ExampleComponent extends React.Component {
  // Initialize state in constructor,
  // Or with a property initializer.
  state = {};
  static getDerivedStateFromProps(nextProps, prevState) {
    if (prevState.someMirroredValue !== nextProps.someValue) {
      return {
        derivedData: computeDerivedState(nextProps),
        someMirroredValue: nextProps.someValue
      };
    }
    // Return null to indicate no change to state.
    return null;
  }
}