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

React开发中TableWrapper组件向函数类型children传递props的实现方法

问题根因

你使用的是Render Props设计模式,TableWrapper的children是一个接收参数后返回JSX的函数,不是常规React组件,你之前将它当做组件用<Component />标签调用的写法不符合该模式的要求。

修复方案

第一步:补全类型定义

先在TableWrapperInterface中明确children的类型:

import type { ReactNode } from 'react'

interface TableWrapperInterface {
  // 保留你原有其他属性的定义
  children: (params: TableWrapperComponentInterface) => ReactNode
  loadData: () => void
  data: any[]
  // 剩余的limit、loading等属性定义保持原有即可
}

第二步:修改TableWrapper渲染逻辑

不要将children当做组件渲染,直接执行这个函数,传入要透传的所有参数即可,修复后完整代码如下:

export const TableWrapper = (props: TableWrapperInterface) => {
  const {
    children,
    loadData,
    setIsExternalCreate,
    setIsExternalOpen,
    emptyStateAddButtonTitle,
    emptyStateButton = true,
    emptyStateText,
    showEmptyState,
    loading,
    data,
    limit = 10,
    isExternalOpen,
  } = props

  // 保留你原有逻辑:dispatchHandler、previousPage、nextPage、sendData等变量的定义
  // ...
  
  return (
    <div>
      {/* 直接执行children函数,传入所有要透传的参数 */}
      {children({
        dispatchHandler,
        setIsOpen: setIsExternalOpen,
        isOpen: isExternalOpen,
        data: sendData,
        loadData,
        previousPage,
        nextPage,
        // 有其他需要透传的参数直接在这里补充即可
      })}
    </div>
  )
}

export default TableWrapper
可选优化

如果需要兼容children不是函数的常规场景,可以加一层类型判断:

return (
  <div>
    {typeof children === 'function' 
      ? children({ /* 你的透传参数 */ }) 
      : children
    }
  </div>
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 02:45:01