为了账号安全,请及时绑定邮箱和手机立即绑定

警告:无法对已卸载的组件执行 React 状态更新

警告:无法对已卸载的组件执行 React 状态更新

慕村9548890 2023-07-29 11:10:25
我收到以下警告:“警告:无法对已卸载的组件执行 React 状态更新。这是无操作,但它表明应用程序中存在内存泄漏。要修复,请取消所有订阅和异步任务在 useEffect 清理函数中。在 div 中的 AddComment(位于 CommentCard.js:50)中(由 Comment " 创建(CommentCard 中的第 50 行是 AddComment 组件所在的行)我有CommentCard组件,它在 ant design 的Comment组件的帮助下显示评论。我使用 Comment 组件的 Children 属性来显示特定评论的AddComment组件。AddComment组件添加对评论的回复。为了显示相应评论的AddComment组件,我使用了状态数组,并且仅针对状态等于 1 的评论显示该组件。添加回复后,我希望删除AddComment组件。为此,我在成功添加回复后更改了评论的状态。我发布回复后立即收到警告。这是我的 CommentCard 组件function CommentCard(props) {  const [hasReplyCommentBox, setHasReplyCommentBox] = useState([]);  const { t } = useTranslation();  const commentStyle = {    padding: '10px',    backgroundColor: 'white',    'whiteSpace': 'pre',    width: '100%'  };  function toggleReplyBoxVisibility(commentIndex) {    var auxState = { ...hasReplyCommentBox };    auxState[commentIndex] = auxState[commentIndex] ? 0 : 1;    setHasReplyCommentBox(auxState);  }  const actions = [    <span      id={"reply-button-" + props.commentIndex}      onClick={() => toggleReplyBoxVisibility(props.commentIndex)}>      {t('Reply to')}    </span>  ];  const commentReplyBox = (    hasReplyCommentBox[props.commentIndex]      ? <AddComment          id={props.codeId}          parentCommentId={props.parentCommentId}          commentIndex={props.commentIndex}          toggleReplyBoxVisibility={toggleReplyBoxVisibility}          updateComments={props.updateComments}        />      : null  );  return (    <Comment      author={props.userId}      datetime={props.datePosted}      content={props.body}      actions={actions}      children={commentReplyBox}      style={commentStyle}    />  );}
查看完整描述

1 回答

?
慕标5832272

TA贡献1966条经验 获得超4个赞

尝试这个


function submitComment() {

    let request = {

      body: comment,

      code_id: props.id,

      line_number: props.lineNumber,

      parent_comment_id: props.parentCommentId

    };

    fetch('/api/comment/add',

      {

        method: 'POST',

        body: JSON.stringify(request)

      }

    ).then(response => response.json())

    .then(data => {

      if (data.success === 1) {

        props.updateComments();

        resetCommentInput();

        // Run resetCommentInput before props.toggleReplyBoxVisibility

        if (props.parentCommentId) {

          props.toggleReplyBoxVisibility(props.commentIndex);

        }

      }

    });

  }

您应该在卸载之前更新组件状态


查看完整回答
反对 回复 2023-07-29
  • 1 回答
  • 0 关注
  • 121 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信