如何通过点击子组件触发父componentDidUpdate

How to trigger parent componentDidUpdate by click in child component

在我的父组件中,我有一个名为 ListOfItems.jsclass 组件,它列出了一堆像这样的对象:

class ListOfItems extends Component {
  construction (props) {
    super(props);
    this.state = {
      objectList: []
    }
  }
}

// This gets the list of objects to display
componentDidMount() {
   this.getObjectList();
}

componentDidUpdate(_prevProps, prevState) {

  if( this.state.ObjectList !== prevState.ObjectList) {

     // this is called infinitely which is a problem
     console.log("entered");
     this.getObjectList();
  }
}

getObjectList = () => {
  const input = { id_for_this_list: id }

  fetch( connectToApi, {
     method: "PUT",
     headers: { //stuff}
     body: JSON.stringify(input)
  })
     .then(res => //)
     .then(result => 
        if( result.length >= 0) {
            this.setState( {...this.state, objectList: result });
        }   
     )
     .catch(err=>{console.error(err)});
}

render () {
  return (
    {this.state.objectList.map(item) => {
      <Object 
        objectList={this.objectList}
        data={item}
       //few other props here
      >
    }}
  )
}
     

在我的子组件中,我有一个名为 Object.js 功能组件 。在此,我有一个删除功能,如果用户选择对象上的“x”图标,该对象将从列表中删除。

// 'x' image that, when clicked on, deletes object from list of objects
// (heavily simplified for Whosebug)

<img onClick= {() => { deleteObject() })>

const deleteObject() = () => {
   fetch( connectToApi, {
     method: "DELETE"
   })
      .then(res => //)
      .then(result => //deletion made and confirmed succesful)
      .catch(err => console.error(err))
}

如何在 ListOfItems.js(父级)中触发 componentDidUpdate(),当我 “x” 上单击 Object(子)上?

顺便说一句,parent 必须是 class componentchild 必须是 功能组件 ,很遗憾。

当您调用 getObjectList 时,您似乎从来没有为您的父组件设置状态,所以这对您来说可能是个问题,我不确定您是否故意将其排除在本摘录之外.

无论哪种方式,您都需要从父组件传递一个函数来设置父组件中保存的状态。这将导致父级重新渲染。

如果您不想更改状态,您可以调用从父级传递的强制刷新的函数,但这并不理想。

parentResetFunction = () => {
   this.forceUpdate()
}