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

React Native自定义组件中为组件Props动态分配类型

实现支持动态类型传递的React Native可复用组件(仿FlatList逻辑)

要实现和FlatList一致的类型自动推导逻辑,核心是利用TypeScript泛型关联data数组的元素类型与renderItem函数的参数类型。以下是具体实现步骤:

1. 定义泛型Props类型

先为组件定义带泛型的Props接口,让data的类型能自动传递给renderItem:

import React, { ReactNode } from 'react';
import { View } from 'react-native';

// 泛型T代表data数组的元素类型
type MyComponentProps<T> = {
  data: T[];
  // renderItem的参数item类型与T绑定
  renderItem: ({ item }: { item: T }) => ReactNode;
};

2. 实现组件核心逻辑

基于上述Props类型编写组件,内部遍历data并调用renderItem渲染子项:

const MyComponent = <T,>(props: MyComponentProps<T>) => {
  const { data, renderItem } = props;

  return (
    <View>
      {data.map((item, index) => (
        <React.Fragment key={index}>
          {renderItem({ item })}
        </React.Fragment>
      ))}
    </View>
  );
};

export default MyComponent;

3. 使用示例

现在可以像FlatList一样使用组件,TypeScript会自动根据data的类型推导renderItem中item的类型:

// 自定义数据类型
type User = {
  name: string;
  age: number;
};

// 调用组件,item自动识别为User类型
<MyComponent
  data={[ { name: 'abc', age: 5 }, { name: 'xyz', age: 5 } ]}
  renderItem={({ item }) => <Text>{item.name}</Text>}
/>

核心原理

通过泛型<T>,我们让data和renderItem建立了强类型关联:当传入User[]类型的data时,TypeScript会自动将renderItem的item推断为User类型,完全复刻FlatList的类型推导逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 09:02:55