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

React组件渲染方式对比:普通JS函数与函数组件哪种更优?

普通JS函数返回JSX是否可行?哪种方式更符合最佳实践?

首先明确:普通JS函数返回JSX完全可行

你写的第一种方式是有效的,React会正常渲染它返回的JSX内容。不过代码里有个笔误:Parent组件里调用的是test(label, value),但定义的函数是child,修正后就能正常运行。

修正后的示例代码:

// 普通JS函数返回JSX
function child(label, value){
  return (
    <h3>
     {label}: {value}
    </h3>
  )
}

export default function Parent(){
  const [state, setState] = useState({label:"", value:""})
  const {label, value} = state;
  
  return (
    <> {child(label, value)} </>
  )
}

两种方式的区别与最佳实践分析

1. 普通JS函数返回JSX(渲染辅助函数)

这种写法本质是UI片段的复用工具函数,适合以下场景:

  • 渲染逻辑简单,不需要独立的状态管理、副作用处理(比如数据请求、DOM监听)
  • 仅在当前父组件内使用,不需要跨组件复用
  • 写法轻便,直接传参就能生成目标JSX

但它存在明显局限:

  • 不是真正的React组件,无法使用任何React Hooks(比如useState、useEffect)
  • 无法通过React.memo做性能优化,父组件每次渲染时,这个函数都会重新执行并生成新的JSX,哪怕参数没有变化
  • 若后续需要给这个UI片段扩展功能(比如加交互、加状态),重构为标准组件的成本较高

2. 标准React函数组件

这是React官方推荐的组件写法,更符合最佳实践,适用于绝大多数场景:

// 标准React函数组件
function Child({state}){
  return (
    <h3>
     {state.label}: {state.value}
    </h3>
  )
}

export default function Parent(){
  const [state, setState] = useState({label:"", value:""})
  
  return (
    <Child state={state} />
  )
}

它的优势包括:

  • 可以使用所有React Hooks,能独立管理自身的状态和副作用
  • 可通过React.memo包裹实现浅比较优化,避免不必要的重渲染
  • 组件边界清晰,遵循React的props传递规范,便于跨组件复用和长期维护
  • 扩展性强,未来新增props、交互逻辑时,修改成本低

总结建议

  • 如果只是当前组件内的简单UI片段,且确定不会扩展功能,用普通JS函数完全没问题,写法更高效
  • 只要这个UI片段可能被复用、需要独立状态/副作用,或者希望代码更规范、易维护,优先选择标准函数组件的写法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 00:19:57