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

React无状态列表组件复用问题:函数组件调用后无渲染输出

问题分析与解决方案

嘿,我一眼就瞅出你这个函数组件没渲染内容的问题啦!主要有两个小坑你踩了:

1. 箭头函数未正确返回JSX元素

你在props.items.map()里用了大括号{}包裹JSX,但没有写return语句——箭头函数如果用大括号,必须显式返回值才行。要么加return,要么去掉大括号让它隐式返回。

2. 缺少根容器元素

React要求组件只能返回单个根元素,你直接返回一堆<li>是不符合规则的,得用容器(比如原来类组件里的<ul>和外层<div>)把它们包起来。


修正后的函数组件代码

function Menu(props) {
  // 还原原来类组件里的样式引用
  const { listStyle } = styles;
  return (
    <div>
      <ul style={listStyle}>
        {/* 用小括号包裹JSX实现隐式返回,或者写成 {return <li.../>} */}
        {props.items.map((i, index) => (
          <li key={index} style={{ marginLeft: 10 }}>
            {i}
          </li>
        ))}
      </ul>
    </div>
  );
}

如果不想保留外层多余的<div>,可以用React的Fragment来做无额外DOM的容器:

// 记得先引入Fragment
import { Fragment } from 'react';

function Menu(props) {
  const { listStyle } = styles;
  return (
    <Fragment>
      <ul style={listStyle}>
        {props.items.map((i, index) => (
          <li key={index} style={{ marginLeft: 10 }}>
            {i}
          </li>
        ))}
      </ul>
    </Fragment>
  );
}

额外小建议

用index作为key虽然能临时解决问题,但如果你的列表项后续会有新增、删除或排序操作,最好用每个item的唯一标识(比如id)作为key,这样React能更高效地更新DOM哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:33:56