How to develop a component that people love?
AD |
() 2023-05-22 09:01 1~5 &AI ReactVue 1~5 1. TypeScript API API 2
() 2023-05-22 09:01

1~5 &AI
ReactVue
1~5
1. TypeScript API API
2. README Mock = link
3.VuexRedux
4.
Interface
type Size = any; // type Size = string; // type Size = "small" | "medium" | "large"; //
DOM
DOMDOMclassName classnames[1] clsx[2] className
export interface IProps {className?: string; style?: React.CSSProperties;}
data-spm dom Props
export type CommonDomProps = {className?: string; style?: React.CSSProperties;} & Record<`data-${string}`, string>// component.tsxexport interface IComponentProps extends CommonDomProps { ...}// orexport type IComponentProps = CommonDomProps & { ...}
1.export props
2.
export type IListProps{/** * Custom suffix element. * Used to append element after list */ suffix?: React.ReactNode;/** * List column definition. * This makes List acts like a Table, header depends on this property * @default [] */ columns?: IColumn[];/** * List dataSource. * Used with renderRow * @default [] */ dataSource?: Array<Record<string, any>>;}
jsdoc[3] vitdoc[4]DEMO API
AICopilot[5]
toolbar?: React.ReactNode; // List toolbar.// Columns // defaultValue is "[]" columns?: IColumns[];
string ReactNode
Input label props string label
export type IInputProps = { label?: string; // }export type IInputProps = { label?: React.ReactNode; // }
React ReactNode

export type IFormProps<T = string> = { value?: T; defaultValue?: T; onChange?: (value: T, ...args) => void;};
value
export type IVisibleProps = {/** * The visible state of the component. * If you want to control the visible state of the component, you can use this property. * @default false */ visible?: boolean;/** * The default visible state of the component. * If you want to set the default visible state of the component, you can use this property. * The component will be controlled by the visible property if it is set. * @default false */ defaultVisible?: boolean;/** * Callback when the visible state of the component changes. */ onVisibleChange?: (visible: boolean, ...args) => void;};
[6]
ahooks useControllableValue[7]
antd[8]/ fusion[9] Form
export type IFormProps = {/** * Field name */ name?: string;/** * Field label */ label?: ReactNode;/** * The status of the field */ state?: 'loading' | 'success' | 'error' | 'warning';/** * Whether the field is disabled * @default false */ disabled?: boolean;/** * Size of the field */ size?: 'small' | 'medium' | 'large';/** * The min value of the field */ min?: number;/** * The max value of the field */ max?: number;};
export interface ISelection<T extends object = Record<string, any>> {/** * The mode of selection * @default 'multiple' */ mode?: 'single' | 'multiple';/** * The selected keys */ selectedRowKeys?: string[];/** * The default selected keys */ defaultSelectedRowKeys?: string[];/** * Max count of selected keys */ maxSelection?: number;/** * Whether take a snapshot of the selected records * If true, the selected records will be stored in the state */ keepSelected?: boolean;/** * You can get the selected records by this function */ getProps?: (record: T, index: number) => { disabled?: boolean; [key: string]: any };/** * The callback when the selected keys changed */ onChange?: (selectedRowKeys: string[], records?: Array<T>, ...args: any[]) => void;/** * The callback when the selected records changed * The difference between `onChange` is that this function will return the single record */ onSelect?: (selected: boolean, record: T, records: Array<T>, ...args: any[]) => void;/** * The callback when the selected all records */ onSelectAll?: (selected: boolean, keys: string[], records: Array<T>, ...args: any[]) => void;}
Merlion UI - useSelection[10]
value mode
Select
mode="single" -> value: string | numbermode="multiple" -> value: string[] | number[]
value
Merlion UI - useCheckControllableValue[11]
url API
export type IAsyncProps { requestUrl?: string; extParams?: any;}
API API
export type IAsyncProps { requestUrl?: string; extParams?: any; beforeUpload?: (res: any) => any format?: (res: any) => any}
23API
API Promise
export type ProductList = { total: number; list: Array<{ id: string; name: string; image: string; ... }>}export type AsyncGetProductList = ( pageInfo: { current: number; pageSize: number }, searchParams: { name: string; id: string; },) => Promise<ProductList>;export type IComponentProps = {/** * The service to get product list */ loadProduct?: AsyncGetProductList;}
1 async
Hooks
- Lazada UploaderUpload + Lazada Upload Service
- Address Selector: Select + Address Service
- Brand Selector: Select + Brand Service
- ...
UI
React Hooks
export function Page() {const lzdUploadProps = useLzdUpload({ bu: 'seller' });return <Upload {...lzdUploadProps} />}
UI
Consumer
Consumer
Expand

isExpand
export type IExpandProps = { children?: (ctx: { isExpand: boolean }) => React.ReactNode;}
export function Page() {return (<Expand> {({ isExpand }) => { return isExpand ? <Table /> : <AnotherTable />; }}</Expand> );}
package.json
repository : npmjs.comnpm.alibaba-inc.commc.lazada.com

package.json mainmoduletypesexports package.json
{"name": "xxx-ui","version": "1.0.0","description": "Out-of-box UI solution for enterprise applications from B-side.","author": "[email protected]","exports": {".": {"import": "./dist/esm/index.js","require": "./dist/cjs/index.js" } },"main": "./dist/cjs/index.js","module": "./dist/esm/index.js","types": "./dist/cjs/index.d.ts","repository": {"type": "git","url": "[email protected]:yee94/xxx.git" }}
README.md
DEMO
`antd` `react` `vue`
`ChatGPT`
[1]https://www.npmjs.com/package/classnames
[2]https://www.npmjs.com/package/clsx
[3]https://jsdoc.app/
[4]https://vitdocjs.github.io/
[5]https://github.com/features/copilot
[6]https://segmentfault.com/a/1190000040308582
[7]https://ahooks.js.org/hooks/use-controllable-value
[8]https://ant.design/
[9]https://github.com/alibaba-fusion/next
[10]https://mc.lazada.com/package/@ali/merlion-ui#/src/hooks/use-selection/README.md
[11]https://mc.lazada.com/package/@ali/merlion-ui#/src/hooks/use-selection/README.md
Disclaimer: The content of this article is sourced from the internet. The copyright of the text, images, and other materials belongs to the original author. The platform reprints the materials for the purpose of conveying more information. The content of the article is for reference and learning only, and should not be used for commercial purposes. If it infringes on your legitimate rights and interests, please contact us promptly and we will handle it as soon as possible! We respect copyright and are committed to protecting it. Thank you for sharing.(Email:[email protected])
Mobile advertising space rental |
Tag: How to develop component that people love
Refund No Return: The "Fleece Party" Under the Vulnerability of Amazon Platform
NextThe Smart Education Scene of Zhongxin Tianjin Ecological City at the World Intelligence Conference is Live Online Nationwide
Guess you like
-
Baidu's 2024 Financial Report: AI Strategy Drives Revenue Growth, Smart Cloud Leads the Large Model RaceDetail
2025-02-18 19:11:21 1
-
Xiaohongshu's IPO Plans: Rumors of State-Owned Enterprise Investment False, but Valuation Could Reach $20 USD BillionDetail
2025-02-18 10:27:03 1
-
Ulike Launches Three New Hair Removal Devices, Ushering in a New Era of Home Hair RemovalDetail
2025-02-17 22:00:06 1
-
Global Personal Smart Audio Market in 2025: Opportunities and Challenges Amidst Strong GrowthDetail
2025-02-17 15:28:45 1
-
OPPO Find N5: An In-Depth Look at the New Document App and Cross-System ConnectivityDetail
2025-02-17 15:25:26 1
-
Ping An Good Driver's AI-Powered Smart Insurance Planner Wins 2024 Technological Innovation Service Case AwardDetail
2025-02-17 09:36:45 1
- Detail
-
Xiaomi's Electric Vehicles Become a Growth Engine: Over 135,000 Deliveries in 9 Months, Orders Extending 6-7 Months OutDetail
2025-02-16 12:34:46 1
-
Geely Granted Patent for "Smart Charging Robot" Design, Enabling Automated EV ChargingDetail
2025-02-14 16:58:11 1
-
OPPO Find N5: Ushering in the 8mm Era for Foldable Smartphones A Milestone Breakthrough in Chinese Precision ManufacturingDetail
2025-02-14 13:05:02 1
-
Global Semiconductor Market Experiences Strong Growth in 2024: AI-Driven Data Centers Fuel Expansion, Samsung Reclaims Top SpotDetail
2025-02-14 13:00:26 1
-
Douyin's 2025 Spring Festival Consumption Data Report: Livestreaming Significantly Boosts Offline Consumption, Intangible Cultural Heritage and Tourism Emerge as New HighlightsDetail
2025-02-06 10:59:24 11
-
98-inch or 100-inch TV? An In-Depth Analysis of Large-Screen TV Selection ChallengesDetail
2025-02-06 05:24:30 1
-
Hanoi Stadium Drone Disaster: Unveiling the Complex Relationship Between Vietnam and the Sino-Korean Drone MarketDetail
2025-02-05 12:51:51 21
-
Douyin's 2023 Spring Festival Consumption Data Report: A Collision of Robust Consumption and Diversified New Year CustomsDetail
2025-02-05 10:21:17 1
-
Baidu Intelligent Cloud Illuminates China's First Self-Developed 10,000-GPU Cluster, Ushering in a New Era of AI Computing PowerDetail
2025-02-05 09:36:39 11
-
Trump's Elimination of the $800 De Minimis Import Threshold: Shockwaves for Cross-Border E-commerceDetail
2025-02-05 00:33:26 1
-
The 2025 Spring Festival Gala's "Yangge Robot" Dance Goes Viral: Netizens React with "China Speed!"Detail
2025-02-04 15:27:53 21
-
DeepSeek's Emergence: China's AI Counteroffensive and the End of American Tech HegemonyDetail
2025-02-04 13:18:57 1
-
Get a 75-inch Big-Screen TV for Around $400? Five High-Value Picks RecommendedDetail
2025-02-02 22:51:38 1