Load(child)将向Parent组件发送一个值,然后将其设置为state并传递给Backbutton(child) .

单击后,按钮(子)将返回到父级的道具 . Parent将根据返回值设置状态,并将其传递回Load(子)组件 .

Problem: 对于几次点击,它工作正常,但随后它停止重新渲染Load(子)组件 . 父日志显示它正在从Backbutton(子)接收数据,但不知何故它不显示Load中的日志 .

家长:

class App extends Component {
  constructor(props) {
    super(props);
    this.state = {
      loadDirs: '',
      backDirs: ''
    }
  }  

getLoad = (info) => {
    this.setState({ loadDirs: info });
  }

  goBack = (instruct) => {
    this.setState({ backDirs: instruct },
      () => { console.log(this.state.backDirs) });
  }

render() {

   return (
          <div> 
             <Backbutton dirs={this.state.loadDirs} backbutton={this.goBack} />
              <Load backload={this.state.backDirs} load={this.getLoad} />  
           </div>
       );
     }
}

后退(儿童):

class Backbutton extends Component {
    constructor({props, dirs}) {
        super(props, dirs);
    }

    prevLink(info) {
        let backlink = info.toString().substr(0, info.toString().lastIndexOf('/') + 0);
        console.log(backlink);
        this.props.backbutton(backlink);
    }


    render() {

        return (
            <button key={this.props.dirs} 
            onClick={() => { this.prevLink(this.props.dirs) }}>
            Back</button>

        )
    }
}


export default Backbutton;

加载(子):

....
  componentDidUpdate(prevProps) {
  if (this.props.backload !== prevProps.backload) {
    console.log(this.props.backload)
    this.allFetch(this.props.backload);
  }
}
....

Edited: 我现在有几个问题:

1)我现在使用Refs(引用)从父级调用子方法,我的应用程序按预期工作 . 但我在反应文档中读到它应该避免refs . 我真的不应该使用refs吗?

2)因为componentDidUpdate对我不起作用 . 任何人都可以用更好的替代方案指导我,或者为什么它不起作用?

我不知道为什么在几次点击后,当使用componentDidUpdate时,Parent突然停止重新渲染子组件,所以我最终使用了refs,因为我想通过单击按钮每次数据更改时触发fetch API方法 .