当前位置: 首页 > news >正文

React useRef 组件内及组件传参使用

保存变量, 改变不引起渲染
import { useRef} from 'react';
const dataRef = useRef(null)
...
dataRef.current = setTimeout(()=>console.log('...'),1000)
绑定dom
const inputRef = useRef(null)
<input ref = {inputRef} />
绑定dom列表 - ref 回调
const itemsRef = useRef({})
{catList.map(cat => (<likey={cat.id}ref={(node) => {const map = getMap();if (node) {itemsRef.current[cat.id] = node;} else {delete itemsRef.current[cat.id]}}}>{cat.id}</li>
))}
访问子组件属性

将 ref 放在自定义组件上,默认情况下会得到 null。因为默认情况下,React 不允许组件访问其他组件的 DOM 节点。手动操作另一个组件的 DOM 节点会使你的代码更加脆弱。
想要暴露其 DOM 节点的组件必须选择该行为。一个组件可以指定将它的 ref “转发”给一个子组件。

// 父组件
const inputRef = useRef(null);
<MyInput ref={inputRef} /> // 1. 告诉 React 将对应的 DOM 节点放入 inputRef.current 中。但是这取决于 MyInput 组件是否允许,默认不允许。// 子组件 MyInput 
import { forwardRef } from 'react';
const MyInput = forwardRef((props, ref) => { // 2. forwardRef 接受父组件的 inputRef 作为第二个参数 ref 传入组件,第一个参数是 props。return (<input {...props} ref={ref} /> // 3. 将 ref 传递给 <input>)
});
使用 useImperativeHandle 暴露 API
import { forwardRef, useRef, useImperativeHandle } from 'react';const MyInput = forwardRef((props, ref) => {const realInputRef = useRef(null);useImperativeHandle(ref, () => ({// 只暴露 focus,没有别的focus() {realInputRef.current.focus();},}));return <input {...props} ref={realInputRef} />;
});export default function Form() {const inputRef = useRef(null);function handleClick() {inputRef.current.focus();}return (<><MyInput ref={inputRef} /><button onClick={handleClick}>聚焦输入框</button></>);
}
http://www.lryc.cn/news/379256.html

相关文章:

  • Intelij IDEA中Mapper.xml无法构建到资源目录的问题
  • 2024.6.23周报
  • 鸿蒙实战开发:网络层的艺术——优雅封装与搭建指南(中)
  • docker in docker 连私有仓库时报错 https
  • mac怎么压缩pdf文件,苹果电脑怎么压缩pdf文件大小
  • 兴顺物流管理系统的设计
  • 力扣(2024.06.21)
  • 飞机大战java
  • Springboot的自动配置原理
  • Interview preparation--elascitSearch深分页问题
  • C语言笔试题:实现把一个无符号整型数字的二进制序列反序后输出
  • elementplus如何实现dialog遮罩层外的元素可以被操作点击
  • Springboot整合Kafka消息队列服务实例
  • kotlin——MVVM框架下的大型项目优化
  • echarts实现折线图点击添加标记
  • 循环赛日程表
  • 计算机网络:运输层 - 概述
  • 使用阿里开源的Spring Cloud Alibaba AI开发第一个大模型应用
  • `THREE.PointsMaterial` 是 Three.js 中用于创建粒子系统材质的类。它允许你设置粒子系统的外观属性,比如颜色、大小和透明度。
  • Android-Android Studio-FAQ
  • 架构师指南:现代 Datalake 参考架构
  • 通讯协议大全(UART,RS485,SPI,IIC)
  • 基于EXCEL数据表格创建省份专题地图
  • 基于java+springboot+vue实现的电商应用系统(文末源码+Lw)241
  • 好文!12个策略解决 Kafka 数据丢失问题
  • Android 第三方框架:网络:OkHttp:源码分析:拦截器
  • FlowUs AI的使用教程和使用体验
  • SwiftUI 6.0(iOS 18)ScrollView 全新的滚动位置(ScrollPosition)揭秘
  • 阿贝云免费虚拟主机和免费云服务器评测
  • 不懂就问,开通小程序地理位置接口有那么难吗?