首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在使用React.fowardRef和useImperativeHandle时,如何创建ref的JSDoc?

在使用React.fowardRef和useImperativeHandle时,如何创建ref的JSDoc?
EN

Stack Overflow用户
提问于 2020-07-31 17:33:25
回答 1查看 1.3K关注 0票数 5

我没有在我的reactjs项目中使用typescript,但我仍然想用JSDocs来记录我的组件。

问题是我有一个带有React.forwardRef的函数组件,我想创建一个指向ref的JSDoc,因为我使用useImperativeHandle并将不同的值传递给ref。

是否可以使用JSDoc来记录ref,以显示我在useImperativeHandle中传递的方法和属性?如果是,是如何实现的?

Where是我想要的示例

在一个组件中,我使用了带有useImperativeHandleReact.fowardRef

代码语言:javascript
运行
AI代码解释
复制
export const Foo = React.fowardRef((props, ref) => {

    useImperativeHandle(ref, () => ({
        myMethod,
        // other methods and properties
    }))

    return <div>{/* ... */}</div>
}

fooRef.current中使用该组件的ref时,我希望在键入.或按Ctrl+ Space时看到myMethod或其他属性。

EN

回答 1

Stack Overflow用户

发布于 2020-10-05 13:14:03

虽然我不知道这是否是完美的解决方案,但对我来说起作用的只是为所有属性(包括ref)编写一个类型定义,然后将其传递给@type属性,所有这些都是在JSDoc中实现的。下面是一个应该可以工作的代码片段:

代码语言:javascript
运行
AI代码解释
复制
import React from 'react';
import PropTypes from 'prop-types';

/**
 * @typedef {Object} RefType
 * @property {Object} current
 * @property {() => void} current.methodOne
 * @property {() => void} current.methodTwo
 */

/**
 * @typedef {Object} Props
 * @property {RefType} ref
 * @property {string} value
 * @property {((event: React.ChangeEvent<HTMLInputElement>) => void) | undefined} onChange
 */

/**
 * @type {React.FC<Props>}
 */
export const Input = React.forwardRef((
  props, 
  /** @type {RefType} */
  ref) => {
  return <input ref={ref} onChange={props.onChange} value={props.value} />
})

Input.propTypes = {
  value: PropTypes.string.isRequired,
  onChange: PropTypes.func.isRequired,
};

Input.displayName = 'Input';

因此,当我使用该组件时,下面是我在VSCode中获得的智能感知,例如:Intellisense after using said component.

智能感知应该在整个项目中工作。

编辑:我应该解释一下为什么我要包含PropTypes。我遇到了与您相同的问题,并找到了解决方案,但我也需要开发工具来保留组件名称。开发工具将显示React.forwardRef而不是真实的组件名称。displayName属性将完成保留原始名称的工作。

编辑:如果你需要在组件内部自动完成,你可以像下面的图片链接那样做。我已经更新了代码片段以反映这一点。Autocomplete on ref argument itself.

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

https://stackoverflow.com/questions/63196529

复制
相关文章
为什么要初始化?
什么是初始化?为什么要初始化?静态变量和局部变量的初始化又有什么区别?实际应用中应该怎么做?本文将一一回答这些问题。
编程珠玑
2019/07/12
5.4K0
为什么要初始化?
实例变量的懒初始化
今天遇到一个很有趣的问题,由于业务要求,需要懒初始化一个实例变量。 简单方法 很顺手就写出下面的代码。 public class LazyFieldInitializer { private Object obj = null; public LazyFieldInitializer(){ } public void someOp(){ if(obj == null){ obj = new Object(); }
jeremyxu
2018/05/10
2K0
dotnet core 发布只带必要的依赖文件
在使用 dotnet core 发布独立项目的时候,会带上大量依赖的库,但是通过微软提供的工具可以去掉一些在代码没有用到的库。
林德熙
2022/08/04
2310
dotnet core 发布只带必要的依赖文件
在使用 dotnet core 发布独立项目的时候,会带上大量依赖的库,但是通过微软提供的工具可以去掉一些在代码没有用到的库。
林德熙
2019/03/13
1.5K0
深度学习: 参数初始化
好的开始是成功的一半。 为了让你的模型跑赢在起跑线 ε=ε=ε=(~ ̄▽ ̄)~ ,请慎重对待参数初始化。
JNingWei
2018/09/27
1.5K0
深度学习: 参数初始化
我为什么要创建一个不能被实例化的类
Python 由于多继承的原因,可能会出现钻石继承[1]又叫菱形继承。为了保留多继承的优点,但又摒除缺点,于是有了混入这种编程模式。
青南
2020/04/08
3.4K0
我为什么要创建一个不能被实例化的类
深度模型的优化参数初始化策略
有些优化算法本质上是非迭代的,只是求解一个解点。有些其他优化算法本质上是迭代的,但是应用于这一类的优化问题时,能在可接受的时间内收敛到可接受的解,并且与初始值无关。深度学习训练算法通常没有这两种奢侈的性质。深度学习模型的训练算法通常是迭代的,因此要求使用者指定一些开源迭代的初始点。此外,训练深度模型的训练算法通常是迭代的问题,以至于大多数算法都很大程度地受到初始化选择的影响。初始点能够决定算法是否收敛时,有些初始点十分不稳定,使得该算法会遭遇数值困难,并完全失败。当学习收敛时,初始点可以决定学习收敛得多快,以及是否收敛到一个代价高或低的点。此外,差不多代价的点可以具有区别极大的泛化误差,初始点也可以影响泛化。
狼啸风云
2019/09/18
2.2K0
深度模型的优化参数初始化策略
【Rust问答】要如何实现一个全局变量的初始化(单例)
Mutex::new(None); static 变量中又不允许出现 非 const fn,怎么能实现这个需求呢
MikeLoveRust
2020/03/25
2.6K0
Java 静态属性与实例属性的初始化
类的初始化包括静态属性的初始化和实例属性的初始化,在加载类过程中的准备阶段会给静态属性分配存储空间,并根据属性的类型设置初始值,例如 int 类型静态属性会设置初始值为 0,布尔类型静态属性会设置初始值为 false;实例属性的初始化会在构造实例对象时发生。
zhipingChen
2019/05/08
2.4K0
神经网络参数初始化方法
神经网络的训练过程中的参数学习是基于梯度下降法进行优化的。梯度下降法需要在开始训练时给每一个参数赋一个初始值。这个初始值的选取十分关键。一般我们希望数据和参数的均值都为 0,输入和输出数据的方差一致。在实际应用中,参数服从高斯分布或者均匀分布都是比较有效的初始化方式。  所以理想的网络参数初始化是很重要的,但是现在框架都定义了很多参数初始化方式,可以直接调用,比如tensorflow的变量初始化方式如下:  initializer:是变量初始化的方式,初始化的方式有以下几种:
嵌入式视觉
2022/09/05
2K0
神经网络参数初始化方法
实例详解ulimit每个参数
core file size是限制core文件的大小,默认情况下是0,就是没有打开的,ulimit -c参数代表core file size,单位是blocks,一个blocks是1024个字节
李俊鹏
2020/07/14
9.2K0
周末重温——TensorFlow之参数初始化
CNN中最重要的就是参数了,包括W和b。训练CNN的最终目的就是得到最好的参数,使得目标函数取得最小值。参数的初始化也同样重要,因此微调受到很多人的重视。tf提供的所有初始化方法都定义在tensorflow/python/ops/init_ops.py。
lujohn3li
2021/06/10
1.1K0
pytorch和tensorflow的爱恨情仇之参数初始化
当然还有一些像:torch.zeros()、torch.zeros_()、torch.ones()、torch.ones_()等函数;
西西嘛呦
2020/10/10
1.5K0
源码走读rgw内置civetweb的参数初始化过程
1. 初始化civetweb时刻的参数传递 src/civetweb/civetweb.h /* Start web server. Parameters: callbacks: mg_callbacks structure with user-defined callbacks. options: NULL terminated list of option_name, option_value pairs that specify Civetwe
用户1260683
2018/01/31
2K1
返璞归真:如何判断一个初始化参数是否来自默认设置
杨廷琨(yangtingkun) 云和恩墨 CTO 高级咨询顾问,Oracle ACE 总监,ITPUB Oracle 数据库管理版版主 Oracle初始化参数之多,变化之繁复可能,我们又如何去分辨哪
数据和云
2018/03/06
8200
返璞归真:如何判断一个初始化参数是否来自默认设置
如何正确初始化神经网络的权重参数
近几年,随着深度学习的大火,越来越多的人选择去入门、学习、钻研这一领域,正确初始化神经网络的参数对神经网络的最终性能有着决定性作用。如果参数设置过大,会出现梯度爆炸的现象,导致网络训练过程发散;而如果参数设置过小,会出现梯度消失的现象,导致收敛极其缓慢。本文是作者拜读Xavier Glorot于2016年在ICML上发表的《Understanding the difficulty of training deep feedforward》及Katanforoosh & Kunin的“Initializing neural networks”后的读书笔记。
用户1621951
2020/02/28
3.4K0
如何正确初始化神经网络的权重参数
人生要找对路,代码要找对路口 | argparse实例详解
刚开始在GitHub找别人源码的时候,经常遇到一个开源项目有好多star,但却不知道怎么用,因为我不懂入口在哪,现在不一样了,我膨胀了。。。不,我学会了这个,而且还发现了一个超叼的东西,准备下周整理一下发出来,超叼的分类器集合,我调试好之后会说明如何使用,敬请期待哈哈哈~~~~
AI算法与图像处理
2019/05/22
6110
隐含层权重参数的初始化方式的对比实验
全1或全0初始化 全1或全0初始化的训练效果 After 858 Batches (2 Epochs): Validation Accuracy 11.260% -- All Zeros
linxinzhe
2018/04/10
9540
隐含层权重参数的初始化方式的对比实验
MYSQL 8 一个实例打开的表被那些参数和资源限制 分析
再开始这个问题之前,我们先的准备一下环境, mysql 8.027 8G 内存 SSD 磁盘 4核心CPU 。同时通过sysbench来对系统进行测试数据的填充。
AustinDatabases
2021/12/20
7110
MYSQL  8  一个实例打开的表被那些参数和资源限制 分析
点击加载更多

相似问题

object.__init__()只带一个参数(初始化实例)

10

Kivy Error: object.__init__()在使用KivyMD时只接受一个参数(要初始化的实例)

10

object.__init__()只接受一个参数(要初始化的实例)

2109

来自Python3的collections.namedtuple: TypeError: object.__init__()继承只带一个参数(要初始化的实例)

110

object.__init__()只接受一个参数(要初始化的实例)

155
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文