如何重新渲染子组件?

时间:2018-07-18 09:25:29

标签: javascript reactjs

加载(子项)将向父组件发送一个值,然后将其设置为状态并向下传递给后退按钮(子项)。

后退按钮(子级)在单击时会将道具返回给父级。父级将根据返回值设置状态,然后将其传回给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);
  }
}
....

已编辑: 我现在有几个问题:

1)我现在正在使用Refs(引用)从父级调用子方法,并且我的应用程序按预期运行。但是我在react docs中读到应该避免引用。我真的不应该使用裁判吗?

2)由于componentDidUpdate对我不起作用。谁能指导我找到更好的替代方法,或者为什么它不起作用?

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

0 个答案:

没有答案