react父组件触发接口请求,子组件接收返回response

接博文“react 解决一个页面多个表单校验产生冲突问题”

子组件定义方法,进行接口请求

return Promise.all([oneFormPromise, twoFormPromise])
      .then(() => {
        return new Promise(function (resolve, reject) {
          // 获取表单内容的值 文件名称
          const fileName = form.getFieldsValue().qualityReport.file.name;
          const { auditOpinion, auditStatus, auditor } = auditRef.current.btnValue();
          const param = {
            reviewId: auditType ? auditTaskInfo.id : taskNo.id + '',
            fileName: fileName,
            auditOpinion,
            auditStatus,
            auditor,
          };
          const formData = new FormData();
          formData.append('file', file.originFileObj);
          formData.append('taskNumber', taskNo.name);
          formData.append('industryCode', taskNo.industry);
          const xhr = new XMLHttpRequest();
          xhr.open('post', '/reportReview/api/v1/jianzai/file/upload', true);

          xhr.onload = function () {
            if (xhr.status == 200) {
              if (JSON.parse(xhr.responseText).code === 200) {
                const res = submitTaskInfo(param);
                resolve(res);
              } else {
                message.error('文件上传失败!');
              }
            }
          };
          xhr.onerror = function (e) {
            reject(e);
          };
          xhr.send(formData);
        });
      })
      .catch((err) => {
        console.log(err);
      });

细节点:

  1. 返回promise类型,父组件用.then接收成功内容
  2. xhr的status仅代表接口请求是否成功,需要再次对返回code判断,接收接口返回值内容(responseText是JSON类型,需要使用JSON.parse() 获取到code值)
  3. onload方法限制只有readyState值为4时,进入到方法当中。onreadystatechange需要对readyState进行再次判断

父组件触发方法,接收返回值

// 触发子组件的方法调用接口
  handleOk = () => {
    this.auditRef.current.auditReport().then((res) => {
      if (res) {
        if (res.code === 200) {
          this.setState({
            visible: false,
            confirmLoading: false,
          });
          this.auditRef.current.resetForm();
          message.success('审核完成!');
          this.props.refreshPage();
        } else {
          this.setState({
            confirmLoading: false,
          });
          message.error(res.message);
        }
      }
    });
  };
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值