在ajax调用之后反应组件状态更改但不重新呈现组件

S.M*_*Mhm 7 javascript ajax reactjs

在这一部分,用户可以评论帖子.在服务器端检查并收到数据后,我尝试更改该this.state.comments值.就这样完成了.但问题是,它没有改变组件的评论部分.我已经阅读了之前关于重新渲染的问题,所以请不要将其标记为重复.以下是代码:

$.post("requests.php", {
    requestKey: 'newComment',
    commenterUser: commenterUser,
    commenterEmail: commenterEmail,
    theComment: theComment,
    pnum: pnum}, function(data, status, xhr){
      if(status == 'success'){
        if(data == 'commented'){
          this.setState({
            comments: data
          })
        }else{

        }
      }
    });
Run Code Online (Sandbox Code Playgroud)

data接收到所有相关文章的评论和评论部分是所有的评论都显示的地方.

Hem*_*ari 5

您也可以使用箭头功能而不是手动绑定.

this.setState不起作用,因为它在使用普通函数时有范围问题.

将其更改为箭头功能.检查以下代码

   $.post("requests.php", {
        requestKey: 'newComment',
        commenterUser: commenterUser,
        commenterEmail: commenterEmail,
        theComment: theComment,
            pnum: pnum}, (data, status, xhr) => {
                if(status == 'success'){
                    if(data == 'commented'){
                        this.setState({
                            comments: data
                        })
                    }else{

              }
           }
       });
Run Code Online (Sandbox Code Playgroud)

编辑:

如果您想远离范围问题,可以使用箭头功能.当您使用箭头功能时,您无需在构造函数中手动绑定您的函数

 submitComment = () => {

 }
Run Code Online (Sandbox Code Playgroud)

如果您使用普通函数并在该函数内使用状态或道具,则需要手动将当前对象引用到本地变量,如下所示

 let that = this;
 that.setState({
     name: “update”
 });
Run Code Online (Sandbox Code Playgroud)

对不起,如果有任何拼写错误.我在移动电话中回答