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

React函数组件中State使用及API调用渲染异常求助

问题分析与修复方案

你的代码有两个核心问题导致无法显示API数据:

1. 普通变量无法触发组件重渲染

React函数组件只有当状态(useState)或属性发生变化时,才会重新渲染并更新UI。你用var items = null定义的是普通变量,即使在fetch回调里给它赋值,React也不会感知到这个变化,自然不会更新页面。

2. 渲染时输出字符串而非变量

你返回的<div>items</div>里的items是字符串字面量,不是你定义的变量。要渲染变量值,必须用大括号{}包裹变量。


修复后的代码

import React, { useState, useEffect } from "react";
import { Row } from "react-bootstrap";
import * as Constants from '../Constants';
import './index.css';

function ActivitySuggestions(){
  // 用useState定义状态,存储API返回的活动数据
  const [activity, setActivity] = useState(null);
  // 用useState定义加载状态,处理数据未返回时的UI
  const [isLoading, setIsLoading] = useState(true);

  useEffect(() => {
    const url = "https://www.boredapi.com/api/activity";
    fetch(url)
      .then((response) => response.json())
      // 用setActivity更新状态,触发组件重渲染
      .then((json) => {
        setActivity(json);
        setIsLoading(false);
      })
      .catch((error) => {
        console.log(error);
        setIsLoading(false);
      });
  }, []);

  // 根据状态渲染不同UI
  if (isLoading) {
    return <div>加载中...</div>;
  }

  return(
    <div>{activity?.activity}</div>
  );
}

export default ActivitySuggestions

关键修改点说明

  • 用useState定义activity状态存储API数据,isLoading状态处理加载过程
  • 在fetch的回调中使用setActivity更新状态,触发组件重渲染
  • 渲染时用{activity?.activity}访问API返回的活动内容(?.是可选链操作符,避免数据未返回时出现报错)
  • 添加加载状态提示,提升用户体验

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 15:00:47