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

使用React.js与Semantic UI React渲染动态标签页的问题

解决React + Semantic UI Tab动态生成的报错问题

嘿,我来帮你搞定这个问题!你碰到的报错其实是两个小细节没处理好,咱们一步步修复:

问题1:没有调用getPanes方法

你现在写的是:

<Tab panes={this.getPanes}/>

这里你把函数本身传给了panes属性,但Semantic UI的Tab组件需要的是一个数组类型的panes。你需要加上括号调用这个方法,这样才能拿到方法返回的数组:

<Tab panes={this.getPanes()}/>

问题2:map返回了二维数组

你的getPanes方法里,map回调返回的是一个包含单个对象的数组([{ ... }]),这会导致map最终输出的是一个二维数组(比如[[obj1], [obj2]]),而Tab组件需要的是一维的对象数组。

你需要把map里的大括号去掉,直接返回单个对象(用小括号包裹对象,避免箭头函数把大括号当成函数体):

getPanes() {
  return this.state.source.map((source) => ({
    menuItem: source.sourceName,
    render: () => <Tab.Pane>Content for {source.sourceName}</Tab.Pane>
  }));
}

修复后的完整代码示例

import React from 'react';
import { Tab } from 'semantic-ui-react';

class DynamicTabs extends React.Component {
  state = {
    source: [
      { sourceName: 'Record 1' },
      { sourceName: 'Record 2' },
      { sourceName: 'Record 3' }
    ]
  };

  getPanes = () => {
    // 用箭头函数定义方法可以避免手动绑定this的问题
    return this.state.source.map((source) => ({
      menuItem: source.sourceName,
      render: () => <Tab.Pane>Tab content for {source.sourceName}</Tab.Pane>
    }));
  };

  render() {
    return <Tab panes={this.getPanes()} />;
  }
}

export default DynamicTabs;

另外补充个小提示:如果你的getPanes方法里用到了this,用箭头函数定义方法(像上面示例那样),或者在组件的constructor里绑定this,能避免出现this指向错误的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:28:24