在函数内调用componentDidMount是否是错误的做法?

A.S*_*S.J 1 javascript reactjs

我的ReactJS应用程序中有一个函数,该函数向服务器发送axios POST请求,以从数据库中删除某个元素。

基本上,我有一个列表,可以从中删除某些项目,但是,React仅显示刷新页面后通过删除元素所做的更改。

这是我使用的删除功能:

handleDelete (event) {
    var id = event.target.id;
    axios.get('todos/delete?id='+id)
        .then(function(response) {
        });
    this.componentDidMount();
}
Run Code Online (Sandbox Code Playgroud)

componentDidMount()从我的数据库中获取数据并将其存储在状态中。我发现,如果我componentDidMount在函数内调用,它会立即显示更改,但是,我觉得这是一种非常不专业的方式来完成我要实现的目标。因此,我的问题是:

  • 在另一个函数中调用生命周期方法是否被认为是不好的做法?
  • 是否有更好的方法让页面立即显示更改?

Joã*_*nha 5

好吧,你不应该真的那样做。

componentDidMount只是组件的生命周期方法。您想要的是这种结构:

fetchData () { ... };

handleDelete (event) {
    var id = event.target.id;
    axios.get('todos/delete?id='+id)
        .then(function(response) {
        });
    this.fetchData();
}

componentDidMount() {
  this.fetchData();
}
Run Code Online (Sandbox Code Playgroud)

这是一个简化的示例,但您明白了。

注意:handleDelete函数中,如果您希望fetchData调用在axios调用之后发生则应在代码中进行编码,然后

axios.get('todos/delete?id='+id)
     .then(() => {
       this.fetchData();
     }); 
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,效果很好!我只需要先声明“ var _this = this”,然后再声明“ _this.fetchData()”,否则会给我一个错误 (2认同)