import React, { ComponentType } from 'react'; import { get, set, has } from './utils'; function convertProps( props: Record, list: string[], mapper: (v: any, key: string) => any, ) { const out: Record = {}; list.forEach(key => { if (has(props, key)) { set(out, key, mapper(get(props, key), key)); } }); return out; } /** * 简单包装,不做任何处理 * 部分组件ref比较特殊,包一层会解决这个问题 */ export function withWrap(Comp: ComponentType) { return (props: any) => { return ; }; } /** * 某些组件会用React.Children.only检查子节点 * 需要做处理避免报错 */ export function withSingleChild( Comp: ComponentType, needsConvert = ['children'], ) { return (props: any) => { const convertedProps = convertProps(props, needsConvert, prop => { let node = React.Children.toArray(prop)[0]; if (node === null || typeof node !== 'object') { node =
{node}
; } return node; }); return ; }; } export function withSingleFunctionChild(Comp: ComponentType) { return (props: any) => { const { children } = props; let node; if (typeof children === 'function') { node = children; } if ( Array.isArray(children) && children.length === 1 && typeof children[0] === 'function' ) { node = children[0]; } if (node) { return {node}; } return
{children}
; }; }