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

React中Exercise组件作为li元素渲染时所有标题同显一行问题

问题原因
  • 所有exerciseName都被输出到同一个<li>(你封装的Title组件)内,多个名称挤在同一个列表项中自然不会分行
  • 父组件仅渲染了一次Exercise组件,无法生成多个独立列表项
  • axios回调中的res.data.map()属于无效逻辑,直接调用setDetails(res.data)即可
修复方案

推荐将数据请求逻辑移到父组件,Exercise组件仅负责渲染单个练习项,拆分后职责更清晰:

1. 修改Exercise组件

function Exercise({ exerciseName }) {
  return (
    <Container>
      <Content>
        <Title>{exerciseName}</Title>
      </Content>
    </Container>
  );
}

const Title = styled.li``;
const Container = styled.div``;
const Content = styled.div``;

2. 修改WorkoutDetails组件

import { useEffect, useState } from 'react';
import { useParams } from 'react-router-dom';
import axios from 'axios';

function WorkoutDetails() {
  const { id } = useParams();
  const [exerciseList, setExerciseList] = useState([]);

  // 列表请求逻辑移到父组件
  useEffect(() => {
    axios
      .get(
        `https://localhost:5001/api/account/${localStorage.userId}/workout/${id}/exercise`
      )
      .then((res) => {
        setExerciseList(res.data);
      });
  }, [id]); // 依赖项添加id,id变化时自动重新请求数据

  return (
    <Container>
      <Background>
        <img src={workoutImageDraw()} alt="" />
      </Background>
      <Content>
        <ExerciseList>
          {/* 遍历列表生成多个独立Exercise项 */}
          {exerciseList.map((exercise) => (
            <Exercise key={exercise.id} exerciseName={exercise.exerciseName} />
          ))}
        </ExerciseList>
      </Content>
    </Container>
  );
}

const ExerciseList = styled.ul``;

临时兼容方案(不推荐)

如果不想调整组件结构,可直接修改Exercise组件的渲染逻辑,给每个名称单独包裹Title组件:

function Exercise() {
  const { id } = useParams();
  const [details, setDetails] = useState([]);

  useEffect(() => {
    axios
      .get(
        `https://localhost:5001/api/account/${localStorage.userId}/workout/${id}/exercise`
      )
      .then((res) => {
        setDetails(res.data);
      });
  }, [id]);

  return (
    <Container>
      <Content>
        {details.map((exercise) => (
          <Title key={exercise.id}>{exercise.exerciseName}</Title>
        ))}
      </Content>
    </Container>
  );
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 02:57:02