ice icon indicating copy to clipboard operation
ice copied to clipboard

怎么通过React.cloneElement 给this.props.children传参

Open AprilChou4 opened this issue 3 years ago • 4 comments

umi下如下写法传参成功,切换到飞冰路由,得不到传参

{/* layout 里需 clone 两级,因为第一级是 Switch,然后才是 Route。 */}
{React.Children.map(children, child => {
          console.log(children, 'children=----');
          return React.cloneElement(
            child,
            null,
            React.Children.map(child.props.fallback, childs => {
              console.log(childs, '---------childs');
              return React.cloneElement(childs, { courtDetail: { aa: 1 }, loading: false });
            })
          );
        })}

AprilChou4 avatar Aug 17 '21 10:08 AprilChou4

简单描述下具体的诉求,是希望向哪个组件穿什么样的参数,包括这段代码是添加到哪里的

ClarkXia avatar Aug 17 '21 12:08 ClarkXia

{
    path: '/collection/outOrgan/:organId',
    name: '委外',
    component: OutOrganDetail,
    children: [
      {
        path: '/info',
        name: '机构信息',
        component: lazy(() =>
          import('@/pages/Outsource/OutOrgan/components/OrganDetail/OrganInfo')
        ),
      },
      {
        path: '/record',
        name: '记录',
        component: lazy(() => import('@/pages/Outsource/OutRecord')),
      },
    ],
  },

具体页面

// 请求获取数据,children 就是子路由(compoent),我希望将请求的数据传进去,之前用的是React.cloneElement实现的

 <FullPageLayout left={topLeft()} right={topRight()} subBar={subBar()}>
        {props.children}
  </FullPageLayout>

<OutOrganDetail/>组件是公用的头,包含一些操作,我希望把请求放在这个组件里,请求获取的数据要怎么传到component的页面里面

AprilChou4 avatar Aug 18 '21 04:08 AprilChou4

image

AprilChou4 avatar Aug 18 '21 06:08 AprilChou4

layout 下渲染的是 react-router 的结构,目前追加的参数的确没有往下透传,这个我们可以优化下 另外针对多级数据的传递推荐使用 useContext 或者官方提供的状态管理方案

ClarkXia avatar Aug 19 '21 04:08 ClarkXia