首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在React.memo中使用带有泛型的属性

如何在React.memo中使用带有泛型的属性
EN

Stack Overflow用户
提问于 2020-02-25 02:17:22
回答 4查看 3.3K关注 0票数 2

我正在尝试将以下代码转换为使用React.memo

代码语言:javascript
运行
AI代码解释
复制
interface Props<TRowData> {
  // props...
}

export function Table<TRowData>({
  propA,
  propB
}: Props<TRowData>) {

}

就像这样(不正确):

代码语言:javascript
运行
AI代码解释
复制
interface Props<TRowData> {
  // props...
}



export const Table = memo<Props<TRowData>>(
({
  propA,
  propB
}) => {

})

如何更正此语法?目前它有这个错误:

代码语言:javascript
运行
AI代码解释
复制
// Cannot find name 'TRowData'.
export const Table = memo<Props<TRowData>>(
                                ~~~~~~~~
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-02-25 07:03:40

使用当前的React类型声明,不可能在React.memo之外创建泛型组件。没有类型断言的解决方案是添加额外的memo函数重载以利用TS3.4 higher order function type inference

代码语言:javascript
运行
AI代码解释
复制
import React, { memo } from "react"

declare module "react" { // augment React types
  function memo<A, B>(Component: (props: A) => B): (props: A) => ReactElement | null
  // return type is same as ReturnType<ExoticComponent<any>>
}

然后,您将能够使Table组件成为泛型。只需确保将泛型函数传递给memo

代码语言:javascript
运行
AI代码解释
复制
interface Props<T> {
  a: T
}

const TableWrapped = <T extends {}>(props: Props<T>) => <div>{props.a}</div>

const Table = memo(TableWrapped)

const App = () => (
  <>
    <Table a="foo" /> {/* (props: Props<string>) => ... */}
    <Table a={3} /> {/* (props: Props<number>) => ... */}
  </>
)

Playground

票数 7
EN

Stack Overflow用户

发布于 2020-02-25 03:04:25

我通过将其保留为一个函数来解决它,将该函数重命名为TableComponent并执行以下操作:

代码语言:javascript
运行
AI代码解释
复制
export const Table = memo(TableComponent) as typeof TableComponent

编辑,这也行得通:

代码语言:javascript
运行
AI代码解释
复制
const typedMemo: <T>(c: T) => T = React.memo
export const Table = typedMemo(TableComponent)
票数 6
EN

Stack Overflow用户

发布于 2020-02-25 03:00:57

您不需要将组件作为React.memo的第一个参数传递吗?我不能测试它,但我觉得这是思考的过程:

代码语言:javascript
运行
AI代码解释
复制
// Overall format:
export const Table = memo(MyComponent, MyFunction)

// With empty arrow function:
export const Table = memo(MyComponent, () => {})

// With your code:
export const Table = memo(MyComponent, ({propA, propB}: Props<TRowData>) => {

})
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60386614

复制
相关文章
Go泛型实战 | 如何在结构体中使用泛型
大家好,我是渔夫子。上一篇文章给大家介绍了Go泛型的三步曲。今天给大家分享一篇在结构体中使用泛型的具体示例。
Go学堂
2023/01/31
3.3K0
什么是泛型以及在集合中泛型的使用[通俗易懂]
泛型最常与集合使用,因为泛型最开始开始被加入Java就是为了解决集合向下转型一类问题的。如果我们有这样一个需求:定义一个描述类圆,要求圆中的数据类型是不确定的,也就是声名属性的时候,属性类型是不确定的。比如描述类圆中有半径,要求半径可以用int,也可以用double。那么此时数据类型不确定,就使用泛型,把数据类型参数化。
全栈程序员站长
2022/06/25
2.2K0
Dart中的泛型方法、泛型类、泛型接口
为了能在一个方法里实现传入什么数据类型就返回什么数据类型,可以利用泛型将方法写成下面这样:
越陌度阡
2020/12/10
3.9K0
Dart中的泛型方法、泛型类、泛型接口
git命令中带有特殊符号如@
使用带用户密码clone的方式: git clone https://username:password@remote 当username和password中含有特殊符号会导致出错, 因为为http的请求,所以需要将特殊符号encode成url格式的 java使用: String c = java.net.URLEncoder.encode(".","utf-8"); System.out.println(c); 源文档 <http://blog.csdn.net/qq1142003960/article/
千往
2018/01/24
2.1K0
Java中泛型的详细解析,深入分析泛型的使用方式
可以发现,在编译过后,程序会采取去泛型化措施.也就是说,Java中的泛型,只在编译阶段有效.在编译过程中,正确检验泛型结果后,会将泛型的相关信息擦除,并且在对象进入和离开方法的边界处添加类型检查和类型转换方法
攻城狮Chova
2022/01/22
1.2K0
Java中泛型的介绍和使用
我们都知道Java里的集合(list,map....)是可以存放任意对象的,只要把对象存储集合后,那么这时他们都会被提升成Object类型。当我们在取出每一个对象,并且进行相应的操作,这时必须采用类型转换。看下面这段示例代码
框架师
2019/12/02
8710
全面解读!Golang中泛型的使用
导语 | Golang在2022-03-15发布了V1.18正式版,里面包含了对泛型的支持,那么最新版本的泛型如何使用呢?有哪些坑呢?本文全面且详细的带你了解泛型在Golang中的使用。 一、什么是泛型 说起泛型这个词,可能有些人比较陌生,特别是PHP或者JavaScript这类弱语言的开发者,尤其陌生。因为在这些弱语言中,语法本身就是支持不同类型的变量调用的。可以说无形之中早已把泛型融入语言的DNA中了,以至于开发者习以为常了。 举个PHP中的泛型的例子: 我们定义了一个sum函数,参数是传入2个变量,返
腾讯云开发者
2022/06/24
8.6K2
全面解读!Golang中泛型的使用
使用泛型委托,构筑最快的通用属性访问器
最近做一个父类的属性向子类的属性赋值的小程序,用了下AutoMapper组件,感觉不错,想探究下它的原理,自己动手做一个例子试试看。实现这个功能,第一反应使用反射遍历对象的属性然后获取父类对象的属性值,接着设置给子类对象同名的属性。但一想到反射的效率,就又打算才用另外的方式来实现。 搜索了下资料,发现了Artech写的《三种属性操作性能比较:PropertyInfo + Expression Tree + Delegate.CreateDelegate》http://www.cnblogs.com/arte
用户1177503
2018/02/26
9510
【Java基础】Java中泛型的使用
如下代码是一个使用了泛型的实体类,E表示这里类型使用的了泛型,意思是可以为任意类型,也包括引用数据类型。
全栈开发日记
2022/05/12
5830
Java泛型详解:<T>和Class<T>的使用。泛型类,泛型方法的详细使用实例
首先告诉大家ArrayList就是泛型。那ArrayList能完成哪些想不到的功能呢?先看看下面这段代码:
用户7886150
2020/12/02
3.5K0
JAVA中的泛型
程序在运行时发生了问题java.lang.ClassCastException。 为什么会发生类型转换异常呢? 我们来分析下:由于集合中什么类型的元素都可以存储。导致取出时强转引发运行时 ClassCastException。 怎么来解决这个问题呢?
星哥玩云
2022/09/14
1.5K0
JAVA中的泛型
泛型类、泛型方法、类型通配符的使用
       你可以写一个泛型方法,该方法在调用时可以接收不同类型的参数。根据传递给泛型方法的参数类型,编译器适当地处理每一个方法调用。
泰斗贤若如
2019/06/19
4K0
Rust中的泛型
泛型程序设计是程序设计语言的一种风格或范式。泛型允许程序员在强类型程序设计语言中编写代码时使用一些以后才指定的类型,在实例化时作为参数指明这些类型。泛型编程的中心思想是从携带类型信息的具体的算法中抽象出来,得到一种可以与不同的数据类型表示相结合的算法,从而生成各种有用的软件。泛型编程是一种软件工程中的解耦方法,很多时候,我们的算法并不依赖某种特定的具体类型,通过这种方法,我们就可以将“类型”从算法和数据结构的具体示例中抽象出来。
端碗吹水
2022/06/01
9810
java中的泛型
java语言的多态性让我们可以把某些只能在运行时确定的类型在编译时使用父类或者父接口表示,这确实解决了很多问题。但有时程序员在声明某些变量时不知道它的具体父类或父接口,只能选择公共父类Object类型,这很不方便。
别团等shy哥发育
2023/02/25
2.7K0
java中的泛型
List集合中泛型使用细节
我们可以看到 需要的是Object 传的是一个String 这种情况我们使用时候是需要注意的 但是有一种情况是可以的
暴躁的程序猿
2022/03/23
9450
List集合中泛型使用细节
Java中的泛型
Java 为什么要发明泛型?泛型给我们开发带来了哪些便利,对于代码层面来说,泛型又给我们带来了什么?
袁新栋-jeff.yuan
2020/08/26
1.1K0
Java中的泛型
泛型的高级使用
最近这一份工作是做跨境电商的对接了Amazon、aliexpress、shopee、ebay等多个平台,发现每对接一个平台都是用复制大法,重复造一些轮子,为了提升工作效率,早点下班,封装了一些代码,使用泛型相对比较多,所以写这篇记录一下。
丁D
2022/08/12
4560
【Java 泛型】泛型简介 ( 泛型类 | 泛型方法 | 静态方法的泛型 | 泛型类与泛型方法完整示例 )
泛型 可以 简单理解为 参数化类型 , 主要作用在 类 , 方法 , 接口 上 ;
韩曙亮
2023/03/29
16.3K0
【Java 泛型】泛型简介 ( 泛型类 | 泛型方法 | 静态方法的泛型 | 泛型类与泛型方法完整示例 )
java泛型(一)、泛型的基本介绍和使用
http://blog.csdn.net/lonelyroamer/article/details/7864531
bear_fish
2018/09/20
1.6K0
TypeScript中泛型及泛型函数、泛型类、泛型接口,泛型约束,一文读懂
 最近在学TypeScript,然后整理了一下关于TypeScript中泛型的一些笔记。
痴心阿文
2022/11/21
3K0

相似问题

使用泛型方法时如何在泛型方法中设置泛型属性属性?

10

带有任何泛型参数的泛型属性列表

11

使用带有泛型对象属性的TableView

10

React.memo的Typescript泛型类等效类

16

使用变量,如类型/泛型方法

26
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档