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
相关产品推荐
相关产品推荐

