You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React类组件中如何将GET请求结果作为Props传递?

解决类组件异步请求后传Props的渲染问题

核心问题

你的Form组件(C1)在首次渲染时,异步请求还未完成,传给C2的number是初始的空值,导致C2拿到无效数据。类组件里不用改组件类型,通过条件渲染或默认值处理就能解决。

具体解决方案

1. 修正状态类型与初始值(推荐)

如果接口返回的是数字,把State里number的类型改成number | null,初始值设为null(明确表示未加载完成),避免类型不匹配:

interface State {
  number: number | null;
}

export class Form extends Component<Props, State> {
  constructor(props: Props) {
    super(props);
    this.state = {
      number: null,
    };
  }
}

2. 优化异步请求写法(提升可读性)

async/await和.then混用容易混乱,统一用try/catch处理错误:

async componentDidMount() {
  try {
    const response = await fetch.get(config.api.uri.getNumber(params));
    this.setState({ number: response.data });
  } catch (error) {
    catchError(error);
  }
}

3. 给C2添加条件渲染或默认值

在render阶段根据状态判断,避免给C2传无效值:

  • 方式一:请求完成前显示加载状态
render(): ReactElement {
  const { number } = this.state;
  
  if (number === null) {
    return <div>加载中...</div>; // 可替换成骨架屏或加载动画
  }
  
  return <Component number={number} />;
}
  • 方式二:给C2传默认值,让C2自行处理
render(): ReactElement {
  const { number } = this.state;
  
  // 若number未加载完成,传默认值0(根据业务需求调整)
  return <Component number={number ?? 0} />;
}

4. 让C2自身处理空值(可选)

如果能修改C2组件,在C2内部判断props有效性:

// C2组件示例
export const Component = ({ number }: { number: number | null }) => {
  if (number === null) {
    return <span>暂无数据</span>;
  }
  return <span>数字:{number}</span>;
};

总结

核心逻辑就是在异步请求完成前,要么先显示加载状态不渲染C2,要么给C2传合理的默认值,避免C2拿到无效数据报错。类组件里componentDidMount是正确的请求时机,只要在render阶段根据状态做好渲染判断即可。

内容的提问来源于stack exchange,提问作者Obiadi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 15:25:23