自定义控件

① ② ③④⑤⑥⑦⑧⑨

1. 主要功能

这里记录自定义控件,可能用到忘记的一些方法。

1.1 向外暴漏方法

① 定义

通过ref 向外暴漏方法。

type CollectItemTableProps = {
collectId: number;
};
// 向外暴露的方法
export type refProps = {
getData: () => { dataSource: API.GoodsClassCollectItem[]; editableKeys: React.Key[] };
};
const CollectItemTable = React.forwardRef<refProps, CollectItemTableProps>(
(props: CollectItemTableProps, ref) => {
// 得到类目ID,要用这个ID来检索
const { collectId } = props;
// 定义向外暴漏的方法
React.useImperativeHandle(ref, () => ({
getData: () => {
return {
dataSource,
editableKeys,
};
},
}));
// ...........................................
}

② 使用

// 第一步:导入组件与类型
import CollectItemTable from './CollectItemTable';
import type { refProps } from './CollectItemTable';
// 第二步:定义一个ref
const tableRef = React.useRef<refProps>(null);
// 第三步:可以通过ref的方法调用暴漏的方法
const { dataSource, editableKeys } = tableRef.current?.getData();
// 组件的定义
<CollectItemTable collectId={collectId} ref={tableRef} />;

1.2 默认参数

//设置默认值
SubTable.defaultProps = {
message: 'Hello World',
};

1.3 样式与子组件

stylechildren 来定义样式与方法

interface SubTableProps {
user: UserListItem;
className?: string;
style?: React.CSSProperties;
children?: React.ReactNode;
}

1.4 剩余参数

...restProps 来获取剩余的参数

const SubTable: React.FC<SubTableProps> = ({
user,
children,
className,
...restProps
}) => {

2. 案例

2.1 简单案例

import React from 'react';
import ProTable from '@ant-design/pro-table';
import { UserListItem, getUserList } from '@/services/user';
interface SubTableProps {
user: UserListItem;
className?: string;
style?: React.CSSProperties;
children?: React.ReactNode;
}
const SubTable: React.FC<SubTableProps> = ({
user,
children,
className,
...restProps
}) => {
console.log(restProps);
return (
<div {...restProps}>
userid:{user?.id} {user?.name}
{children}
</div>
);
};
//设置默认值
SubTable.defaultProps = {};
export default SubTable;

FC 是 react 官方提供的一个 interface 的简写:FunctionComponent,接收一个范型。

参考文档