如何在props更改时重置组件中的状态

IT技术 reactjs
2021-05-08 06:32:49

我应该如何在每次props更改时重置孩子的状态?

父组件:

render() {
    const { show, month } = this.props; // January, February, ...

    return (
      { show ? <Child selectedMonth={month} /> : null }
    );
  }

子组件:

componentDidMount() {
    this.resetChildState();
    // this will never run if the Parent's month prop is changed
    // only if show becomes false from true
  }

我希望 resetChildState 在每个月更改时运行。

4个回答

尝试使用componentDidUpdate,在此方法的主体中,您可以比较来自父级的props是否更改。因此,如果他们确实只是调用了您的重置方法或您想要的任何方法。有关更多信息,请访问https://reactjs.org/docs/react-component.html#componentdidupdate

componentDidUpdate(prevProps, prevState) {
   if(this.props.selectedMonth!== prevProps.selectedMonth) {
        this.resetChildState();
   }
}

您可以使用getDerivedStateFromProps()

static getDerivedStateFromProps(nextProps, prevState) {
 if(monthChanged){
  return initialState; //reset to initialState that you have defined.
  }
 return null;
}

如果您只想在更改props后完全重置您的状态,您可以使用componentWillReceiveProps如下所示react 生命周期:

class Children extends React.Component {
    // ...
    state = {
      name: "test"
    };

    componentWillReceiveProps(nextProps) {
      this.setState({name: ""});
    }
    // ...
}

使用 ComponentDidUpdate

 componentDidUpdate() {
        if (this.props.id !== this.state.section_id) {
            this.setState({
                section_id:this.props.id,
                filteredProducts:[],
                productsByPage:[],
                pageNumber:0,
                hasMore:true,
                showloading:true

            },()=>this.fetchData());
        }
    }