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

React/TypeScript中const组件内调用函数渲染异常的解决方法

问题根因

两个问题导致渲染异常:

  1. JSX语法规则要求:所有需要动态执行的JavaScript表达式(包括函数调用、变量读取、逻辑运算),必须包裹在{}中才能被React识别执行。你直接在div标签内部裸写getState("A")这类内容,React会把它当成普通静态文本直接输出,不会执行函数。
  2. 函数参数传递错误:你定义的getState第一个参数要求接收一个带payload属性的props对象,实际调用时只传了state字符串,就算加了花括号调用,也会因为参数结构不匹配拿不到payload数据,返回null或者报错。另外原代码中直接渲染payload[i]整个对象也不符合React规则,会触发“对象不能作为React子元素”的报错,需要取对象下的具体可渲染字段(比如name字段)。
修正后代码

直接调整参数逻辑+补全JSX表达式包裹即可:

const numberStates = 3;
// 调整参数定义,直接接收payload数组和目标state,传参更简洁
function getState(payload: TooltipProps<ValueType, NameType>['payload'], state: string ){
  if(payload){
    for(let i = 0; i < numberStates; i++){
      if(payload[i].dataKey == state){
        // 补列表key属性,不要直接渲染整个payload[i]对象,取name字段展示
        return <p key={state}>{ payload[i].name } : { payload[i].value }</p>
      }
    }
  }
  return null;
}

const CustomTooltip = ({ active, payload, label}: TooltipProps<ValueType, NameType>) => {
  if(active && payload && payload.length){
    return (
      <div className="custom-tooltip">
        {/* 用花括号包裹函数调用,传入正确的payload参数 */}
        {getState(payload, "A")}
        {getState(payload, "B")}
        {getState(payload, "C")}
      </div>
    );
  }
  return null;
}
补充说明

如果不想调整getState的参数定义,保持原来第一个参数解构props的写法,调用时传参格式要对应写成{getState({payload}, "A")},但这种写法会传递冗余参数,直接传实际用到的payload数组逻辑更清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 21:39:15