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

阿里巴巴网站网络营销的平台腾讯网站认证

阿里巴巴网站网络营销的平台,腾讯网站认证,中国建设网官方网站下载e路最新版,网站优化排名软件网站简述 useRef 用于操作不需要在视图上渲染的属性数据,用于访问真实的DOM节点,或者React组件的实例对象,允许直接操作DOM元素或者是组件; 写法 const inpRef useRef(params)参数: useRef(params),接收的 …

简述

useRef 用于操作不需要视图上渲染的属性数据,用于访问真实的DOM节点,或者React组件的实例对象,允许直接操作DOM元素或者是组件;

写法

const inpRef = useRef(params)

参数:
useRef(params),接收的 params 可以是任意类型的数据,初始值在React首次渲染中会被忽略
返回值inpRef,是一个包含 current 属性的对象,每次修改更新都会返回包含该属性的对象;

1、表单中直接通过 inpRef.current 修改

import { useRef  } from 'react'
export default function MyRef() {const inpRef = useRef(null)console.log('==render=')const handleSearch = () => {console.log('==inpRef==', inpRef)inpRef.current.value = inpRef.current.value - 0  + 1console.log('==value=', inpRef.current.value)}return (<div><input className="inp" ref={inpRef}></input><button onClick={handleSearch}>搜索</button><hr /><button>{inpRef?.current?.value || '初始值'}</button></div>)
}

请添加图片描述
通过log日志可以看出来:
render 只有在初始化渲染时候才会打印,而当点击 搜索 按钮进行累加 input的值时候,只有input输入框中的值变化了,button 按钮中的值依然是 “初始值” 三个字;

2、直接操作DOM事件

可以直接访问自身组件中的事件,但是不允许访问其它组件的事件,即使是子组件事件也不行,因为React设计的 Refs 是一种脱围机制,访问其它组件的事件,会使组件本身变得不那么稳定健壮;可以使用forwardRef 访问到子组件的事件

import { useRef  } from 'react'
export default function MyRef() {const inpRef = useRef(null)const handleSearch = () => {console.log('==inpRef==', inpRef)inpRef.current.focus()}return (<div><input className="inp" ref={inpRef}></input><button onClick={handleSearch}>搜索</button></div>)
}

useRef 返回值,可以直接操作input 原生事件,如focus、blur、change;vidoe视频的播放play、暂停pause

3、访问子组件事件

需要使用 forwardRef 和 useImperativeHandle
通过useImperativeHandle 在子组件暴露出父组件需要访问的属性或方法,类似与vue3 中的defineExpose()

// 父组件
import { useRef, useEffect  } from 'react'
import Child from './child'
export default function MyRef() {const childRef = useRef(null)console.log('==render=')const handleGetChild = () => {console.log('==childRef==', childRef)childRef.current.handleChange()childRef.current.myfocus()}return (<div><button onClick={handleGetChild}>获取子组件</button><hr /><Child ref={childRef} ></Child></div>)
}
// 子组件
import { forwardRef, useRef, useImperativeHandle } from 'react'
// 使用 forwardRef 让组件使用 ref 将 DOM 节点暴露给父组件
const ChildInp =  forwardRef(({value}, ref) =>{// 定义当前组件中 input 的refconst inputRef = useRef(null);const handleChange = (data) => {console.log('==handleChange=', data)}// 只暴露 父组件需要的属性方法useImperativeHandle(ref, () => {console.log('=ref=8888=', inputRef)return {handleChange,myfocus(){inputRef.current.focus()}}}, [])return (<div><p>Child 组件:</p><inputvalue={value}onChange={handleChange}ref={inputRef}/></div>)}) export default ChildInp

用途:

1、直接操作DOM:可以通过 inpRef 来访问真实DOM,进而操作原生DOM的一些增删改查、颜色位置等操作;
2、访问组件的方法属性:有时我们需要在父组件直接访问子组件的属性方法,可以结合forwardRef 访问到子组件的方法;
3、获取组件的实例或者事件进行监听

注意事项:

1、inpRef.current 是可以直接修改的,但是它的修改不会触发视图的变更;
2、在视图更新渲染期间,不要尝试读写inpRef.current,这样会导致组件的行为难以捕捉;可以在 事件处理程序或者 Effect 中读取和写入 ref。
3、inpRef 可以在重新渲染直接存储信息,普通的对象每次重新渲染会将信息重置
4、谨慎使用 useRef 访问DOM的操作,尽可能使用数据驱动操作,触发现有方案无法满足,才使用useRef访问DOM

http://www.yayakq.cn/news/486326/

相关文章:

  • 怎么扫码进入公众号广州网站建设seo
  • 企业网站设计服务优化网站平台
  • 建设厅网站总经济师是干什么的贵州省住房和城乡建设厅网站首页
  • 青岛网站优化flash网站源文件下载
  • 做品牌网站哪个好点免费网站制作软件
  • 保定网站建设公司哪家好网站策划案怎么做
  • 分类信息网站营销建设电商网站的
  • 关键词代做排名推广泽成杭州seo网站推广排名
  • 山东建站管理系统淘宝支持做微交易网站吗
  • 动易 网站统计 首次打开如何做淘宝商城网站设计
  • 二次网站开发平台眉山建网站
  • 微信公众商城网站开发腾讯网页版
  • led营销型网站建设wordpress 免费个人主题
  • 网站建设运行情况惠州开发做商城网站建设哪家好
  • 如何做网络营销推广ppt如何优化关键词搜索
  • 网站的互动广东省建设见证员网站
  • 网站网络营销推广商城阿里云服务器可以做多少个网站
  • 商城网站建设流程可以做网站的电脑软件
  • 网站域名地址查询wordpress 添加外链
  • 做微景观的网站建设银行网站特点分析
  • 做的最好的微电影网站上海学习网站建设
  • 怎么查一个网站是谁做的wordpress 缩略图模糊
  • 济南网站制作网站西宁网站建设君博解决
  • 网站开发不用mvc行不行做公司网站的服务费入什么费用
  • 如何建立外贸网站各大网站做推广广告
  • 外贸网站镜像做直播网站软件有哪些软件
  • 越南做企业网站怎么做网站接口
  • 广州微网站建设dmz100python做公司网站
  • 织梦网站上传及安装网络广告宣传怎么做
  • 大神部落 网站建设现代网站开发设计报告