react.js - React Hooks中forwardRef里面的泛型疑问?

 

问题描述:

// 子组件
const TabItemChildren = forwardRef<RefHandle, ChildProps>((props, ref) = {})

RefHandle是子组件通过钩子useImperativeHandle中返回的对象类型声明,即抛给父组件中的ref上的属性的类型声明

image.png

image.png

为什么这个泛型是这样的, 这俩个泛型参数顺序不能更换, 我有点看不懂


 

第 1 个答案:

猜测应该是出于props可能不需要显示定义类型的考虑

function forwardRef<T, P = {}>(render: ForwardRefRenderFunction<T, P>): ForwardRefExoticComponent<PropsWithoutRef<P> & RefAttributes<T>>;

这是官方类型定义,可以看到props是可选的【默认{}】,可选的泛型只能放在后面,至于render里为什么是props在前,而不跟泛型一致,估计是因为先有的实现才加的类型吧。这方面的原因可能得翻看下git提交历史才能知道


 

第 2 个答案:

forwardRef的写法就这么定义的,你也可以自己改下


 

第 3 个答案:

官网就是这样定义的:https://react.dev/reference/react/forwardRef


 

第 4 个答案:

如果你想了解原理,去看一下源代码吧


像indexedDB这种浏览器提供的大容量的本地数据库,具有什么应用场景呢?