是否也有信号表明父组件的状态已设置,然后子组件的状态也已设置?

问题描述 投票:0回答:1

[当父组件设置状态(itemSelected:项)时,我也希望子组件设置状态(isShowForm:true),那么是否有任何信号或条件允许我执行该操作?

<pre>
//this is child Component
class HeaderComponent extends Component {
  constructor(props) {
    super(props);
    this.state = {
      isShowForm: false,
    };
  }

  handleEdit = () =>{
    if(any signal?){
      this.setState({isShowForm:true})
    }
  }
export default HeaderComponent;

//this is parent Component 
class Task extends Component {
  constructor(props){
    super(props);
    this.state = {
      itemSelected: null,
    }
  }
handleEdit = (item) => {
    this.setState({itemSelected: item})
  }
render() {

    let {itemSelected} = this.state;
return(
 HeaderComponent itemSelected={itemSelected}/>
)

</pre>
reactjs asynchronous components setstate flow
1个回答
0
投票

您可以将所需的状态从父组件传递给子组件,并在子组件中使用componentDidUpdate生命周期来收听道具并做出相应的反应。

class HeaderComponent extends Component {
  constructor(props) {
    super(props);
    this.state = {
      isShowForm: false,
    };
  }

  componentDidUpdate(prevProps) =>{
    // Any identifying property to see if the itemSelected object has indeed changed. I'm just assuming that it has a unique ID
    if(prevProps.itemSelected && prevProps.itemSelected.id !== this.props.itemSelected.id) {
      this.setState({ isShowForm: true })
    }
  }
export default HeaderComponent;

//this is parent Component 
class Task extends Component {
  constructor(props){
    super(props);
    this.state = {
      itemSelected: null,
    }
  }
handleEdit = (item) => {
    this.setState({itemSelected: item})
  }
render() {

    let {itemSelected} = this.state;
return(
 <HeaderComponent itemSelected={itemSelected}/>
)
© www.soinside.com 2019 - 2024. All rights reserved.