Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在使用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

复制
相关文章
访问列表中的值
#!/usr/bin/python list1 = ['physics', 'chemistry', 1997, 2000] list2 = [1, 2, 3, 4, 5, 6, 7 ] print "list1[0]: ", list1[0] print "list2[1:5]: ", list2[1:5]
用户8442333
2021/05/27
5.9K0
Angular2 路由传值
在接收值得组件里面导入ActivatedRoute 路由设置页面传参 { path: 'view/:mid' , component: ViewComponent}, 父级页面路由跳转的实现 <div [routerLink]="['/email/view',mail.id]">页面跳转传值</div> 子页面的Component通过下面的方法可以获取到父页面路由传过来的参数<b>mail.id</b> // import { Component, OnInit } from '@ang
用户1437675
2018/08/20
8060
Angular2 中的指令
组件:一种带有模板的指令;使用component来装饰组件类 属性指令:改变元素的外观或行为,如NgClass,NgStyle;使用Directive来装饰指令类 结构指令:向DOM中添加或删除元素,如NgIf,NgFor;使用Directive来装饰指令类
用户1437675
2018/08/20
1.8K0
Angular2 组件(页面)之间如何传值
在Angular 2中,数据和事件变化检测从上到下发生从<b>父级到子级。</b>
用户1437675
2018/08/20
4K0
Angular2 组件(页面)之间如何传值
SpringBoot中自定义注解实现控制器访问次数限制
今天给大家介绍一下SpringBoot中如何自定义注解实现控制器访问次数限制。 在Web中最经常发生的就是利用恶性URL访问刷爆服务器之类的攻击,今天我就给大家介绍一下如何利用自定义注解实现这类攻击的
林老师带你学编程
2018/01/04
2.7K0
迭代器模式(控制访问集合中的元素)
现在我们需要思索,JDK是怎么做到这一切的?现在让我们先利用迭代器实现一个数组类型Array,这个类型需要支持添加、移除、遍历操作。
幺鹿
2018/08/21
1.4K0
迭代器模式(控制访问集合中的元素)
Android 中的属性动画 --- 2(插值器)
在上一篇文章中,我们使用 ValueAnimator 这个类来实现了操作 View 对象的 height 属性从而实现了动画形式的显示和隐藏 View 控件。我们知道 ValueAnimator 这个类只用于根据当前动画的完成度和按照一定的“规律”产生一系列有规律的数字,事实上,属性动画的核心部分也就是这个,我们可以不断获取 ValueAnimator 产生的数字用于操作 View 的属性从而完成动画。那么 ValueAnimator 按照什么“规律”来产生一系列的数字呢?其实这个规律就是插值器。我们在定义属性动画的时候,需要通过setDuring 方法来为属性动画指定完成这个动画的时间,那么插值器就是用不同的时间因子产生不同的值,说白了插值器就像是一个公式,根据输入来转换成对应的输出。不同的插值器下,每个单位时间所达到的变化值也是不一样的,如果说使用线性插值器,那么每个单位时间内变化的值都一样。这就好比在规定的时间内跑步一样,有些人一开始跑的快,后面跑的慢,有些人一开始跑得慢,后面跑得快,但是大家都能在规定的时间里面到达终点。插值器就相当于描述跑步速度的对象。 Android 属性动画框架给我们提供了一些插值器和其对应的变化曲线:
指点
2019/01/18
1.7K0
Android 中的属性动画 --- 2(插值器)
SpringBoot之读取配置文件中自定义的值
一般来说,我们会在配置文件中自定义一些自己需要的值,比如jwt的密匙,或者一些FTP配置等信息
彼岸舞
2021/01/21
2.4K0
Angular2 拦截器(页面请求修改Url+headers传值+获取服务器返回的错误信息)
1.我们首先定义一个服务 <b>HttpInterceptorService</b>
用户1437675
2018/08/20
3K0
Carson带你学Android:自定义动画神器-插值器与估值器(含实例教学)
设置方法1:在 动画效果的XML代码中设置插值器属性android:interpolator
Carson.Ho
2022/03/24
1.1K0
Carson带你学Android:自定义动画神器-插值器与估值器(含实例教学)
idea中Debug时计算自定义表达式的值
没有返回结果,使用ctrl+alt+v抽取变量,可以自动生成返回,记得补充末尾的分号.
玖柒的小窝
2021/09/14
6950
idea中Debug时计算自定义表达式的值
shell脚本 从自定义的值中随机抽取+不重复
日期:2018/6/12 介绍:从数组里随机抽一个,但不会重复,相比之下python比较好做出效果
陈不成i
2021/06/24
3.3K0
Angular2入门体验
好的工具往往使得开发应用更快更简单,而不是任何模块都手动开发。angualr cli就是一个支持 创建工程,添加文件,对各种任务如测试、打包、部署等迭代。 本文的目的就是基于TypeScript开发构建一个angualr应用,使用angualr cli可以选择工程的风格。 在本章的 末尾,你可以理解CLI的开发以及开发完整应用的样例。 也可以通过这个链接直接下载源码。 第一步,配置环境变量 在开始开发前,需要安装nodejs。 点击这个网址,Nodejs安装文件下载 在命令行中,执行: sudo npm i
用户1154259
2018/04/17
1.7K0
angular2 路由问题
Uncaught (in promise): Error: Cannot match any routes. URL Segment: 'main' 这个问题的处理很简单,是路由的路径写错了, import { NgModule } from '@angular/core'; import { Routes, RouterModule } from '@angular/router'; import {loginComponent} from './login/login.component'; impor
杭州前端工程师
2018/06/15
1.2K0
Angular2 之 Animations
Angular2的动画系统赋予了制作各种动画效果的能力,致力于构建出与原生CSS动画性能相同的动画。 Angular2的动画主要是和@Component结合在了一起。 animations元数据属性在定义@Component装饰。就像template元数据属性!这样就可以让动画逻辑与其应用代码紧紧集成在一起,这让动画可以更容易的出发与控制。 使用要点 Angular2的动画是使用<u>模型驱动</u>的方式在两个状态之间进行转换,是由状态和状态之间的转场效果所定义的。 动画被定义在@Compone
贺贺V5
2018/08/21
1.9K0
Angular2 之 Animations
D11-Android自定义控件之动画篇3-插值器与估值器
零、前言 估值器和插值器丰富了动画更新时的效果 为方便本案例演示使用了我的LogicCanvas绘图库--github地址,当然你也可以自己绘制 估值器:TypeEvaluator :该以什么方
张风捷特烈
2018/09/29
7550
D11-Android自定义控件之动画篇3-插值器与估值器
抛弃dict[key]的方式访问Python字典的值
如果key不存在,dkey会抛出一个KeyError类型的异常,这将导致python程序崩溃,这是非常令人烦恼的事情。
AIFEx
2023/10/04
2840
抛弃dict[key]的方式访问Python字典的值
Oracle 触发器中修改字段值
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wzy0623/article/details/53909715
用户1148526
2019/05/25
1.8K0
再谈属性动画——介绍以及自定义Interpolator插值器
属性动画中有一个重要的概念就是插值器——Interpolator,根据流失的时间因子计算得到属性因子。Android中默认的插值器是AccelerateDecelerateInterpolator,内置了很多插值器,本文将以一个例子介绍各种插值器的效果,以及如何自定义Interpolator。 话不多说,先看demo,如下视频
用户1108631
2019/08/17
1.9K0
在使用angular2中使用nodejs创建服务器,并成功获取参数
老是遇到很多坑等着自己去填. 首先创建服务器: 1.最好使用express,这个库有更多的api,方法:npm install express --save; 2. npm install @types/express --save; 安装nodemon 可以让服务器自动重启, 方法:npm install nodemon; 在启动服务器的时候用:nodemon build/...js; 这样服务器就算启动完成了. /** * Created by Administrator on 2017/5/16.
杭州前端工程师
2018/06/15
4.4K0

相似问题

没有“”angular2的值访问器

27

Angular2中的错误-没有值访问器'‘

13

从Angular2中的自定义验证器访问服务

35

原始异常:没有'‘- angular2的值访问器

10

Angular2:没有嵌套表单的值访问器

215
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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