Есть ли сигнал, что состояние родительского компонента установлено, а затем - и состояние дочернего компонента? - PullRequest
0 голосов
/ 08 января 2020

когда состояние набора родительских компонентов (itemSelected: item) я тоже хочу установить состояние дочерних компонентов (isShowForm: true), поэтому есть ли сигнал или условие, позволяющее мне это делать?

<code><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}/>
)

1 Ответ

0 голосов
/ 08 января 2020

Вы можете передать требуемое состояние от родительского компонента к потомку и использовать 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}/>
)
...