gpt4 book ai didi

javascript - 如何使用 jsdoc 注释注释 React.forwardRef 以便智能感知可以显示在底层组件中?

转载 作者:行者123 更新时间:2023-12-04 12:23:02 25 4
gpt4 key购买 nike

我有一个这样写成函数的 React 组件:

function Button({ text, icon }) {
return ...
}

Button.propTypes = {
text: PropTypes.string.isRequired,
icon: PropTypes.string.isRequired
}
使用此组件时,我在 vscode 中获得了自动完成/智能感知
如果我将此组件包装在 React.forwardRef 中, export default React.forwardRef((props, ref) => <Button btnRef={ref} {...props} />)然后我得到 forwardRef 的智能感知功能,这对我的使用没有帮助,因为现在我无法让 Prop 自动完成/显示在智能感知中。
我试过注释 React.forwardRef与 jsdoc extends/ augments但没有成功,在这种情况下,即使是 forwardRef 的默认智能感知使用停止显示。 (我相信这是因为 vscode 比 jsdoc 注释更偏爱可用类型)。有没有办法让我获得与未包装组件类似的包装组件的智能感知?这与我对以与未包装组件类似的方式使用包装组件的理解一致。

最佳答案

这取决于你想对这些类型有多迂腐。通常,这些组件的使用与其他功能组件几乎相同,因此最简单的方法是将结果的类型声明为功能组件。 props 的技巧是首先为 prop 类型创建一个变量,然后为泛型类型引用该变量(或者至少,我还没有找到一种方法让它在没有间隙值的情况下工作):

/**
* @type React.FC<ButtonPropTypes>
*/
const Button = forwardRef(({ text, icon }, ref) => (
<button ref={ref}>{text}{icon}</button>
))

const ButtonPropTypes = {
text: string.isRequired,
icon: string.isRequired,
// `ref` isn't a "real" prop, so `prop-types` will not not actually validate
// this one, but this adds it to the intellisense list if desired. Feel
// free to just omit it.
ref: oneOf(shape({ current: any }), func),
}

Button.propTypes = ButtonPropTypes
如果要更准确, forwardRef 的返回类型实际上是:
/**
* @type React.ForwardRefRenderFunction<HTMLButtonElement, ButtonPropTypes>
*/
const Button = forwardRef(({ text, icon }, ref) => (
<button ref={ref}>{text}{icon}</button>
))

const ButtonPropTypes = {
text: string.isRequired,
icon: string.isRequired,
}

Button.propTypes = ButtonPropTypes
但是,IntelliSense 似乎无法识别 ref Prop (工作正常,只是不在列表中)。
该类型的定义在这里:
https://github.com/DefinitelyTyped/DefinitelyTyped/blob/3423b4fc3e3da09f8acc386bc2fee6fb8f5e0880/types/react/index.d.ts#L559
第一个参数是将分配给 ref 的值的预期类型。但是,由于您实际上并没有静态输入 ref无论如何你都会通过,你可以选择用 ? 省略那个。 :
/**
* @type React.ForwardRefRenderFunction<?, ButtonPropTypes>
*/
我认为您对最后一部分的意思是您不会同时拥有未包装和包装的版本。这是典型的模式,因为保留两者并没有真正的用处。但是,顺便说一句,您可以直接引用 propTypes用作泛型类型的任何其他组件的值,例如:
/**
* @type React.FC<UnWrappedButton.propTypes>
*/

关于javascript - 如何使用 jsdoc 注释注释 React.forwardRef 以便智能感知可以显示在底层组件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66553490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com