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

定制型网站建设网站百度无排名

定制型网站建设,网站百度无排名,个人网站建设 开题报告,今天的新闻头条最新消息useRef 当你在React中需要处理DOM元素或需要在组件渲染之间保持持久性数据时,便可以使用useRef。 import { useRef } from react; const refValue useRef(initialValue) refValue.current // 访问ref的值 类似于vue的ref,Vue的ref是.value,其次就是vu…

useRef

当你在React中需要处理DOM元素或需要在组件渲染之间保持持久性数据时,便可以使用useRef。

import { useRef } from 'react';
const refValue = useRef(initialValue)
refValue.current // 访问ref的值 类似于vue的ref,Vue的ref是.value,其次就是vue的ref是响应式的,而react的ref不是响应式的

通过Ref操作DOM元素

参数
  • initialValue:ref 对象的 current 属性的初始值。可以是任意类型的值。这个参数在首次渲染后被忽略。
返回值
  • useRef返回一个对象,对象的current属性指向传入的初始值。 {current:xxxx}
注意
  • 改变 ref.current 属性时,React 不会重新渲染组件。React 不知道它何时会发生改变,因为 ref 是一个普通的 JavaScript 对象。
  • 除了 初始化 外不要在渲染期间写入或者读取 ref.current,否则会使组件行为变得不可预测。
import { useRef } from "react"
function App() {//首先,声明一个 初始值 为 null 的 ref 对象let div = useRef(null)const heandleClick = () => {//当 React 创建 DOM 节点并将其渲染到屏幕时,React 将会把 DOM 节点设置为 ref 对象的 current 属性console.log(div.current)}return (<>{/*然后将 ref 对象作为 ref 属性传递给想要操作的 DOM 节点的 JSX*/}<div ref={div}>dom元素</div><button onClick={heandleClick}>获取dom元素</button></>)
}
export default App

数据存储

我们实现一个保存count的新值和旧值的例子,但是在过程中我们发现一个问题,就是num的值一直为0,这是为什么呢?

因为等useStateSetCount执行之后,组件会重新rerender,num的值又被初始化为了0,所以num的值一直为0。

import React, { useLayoutEffect, useRef, useState } from 'react';function App() {let num = 0let [count, setCount] = useState(0)const handleClick = () => {setCount(count + 1)num = count;};return (<div><button onClick={handleClick}>增加</button><div>{count}:{num}</div></div>);
}export default App;

在这里插入图片描述

如何修改?

我们可以使用useRef来解决这个问题,因为useRef只会在初始化的时候执行一次,当组件reRender的时候,useRef的值不会被重新初始化。

import React, { useLayoutEffect, useRef, useState } from 'react';function App() {let num = useRef(0)let [count, setCount] = useState(0)const handleClick = () => {setCount(count + 1)num.current = count;};return (<div><button onClick={handleClick}>增加</button><div>{count}:{num.current}</div></div>);
}export default App;

在这里插入图片描述

实际应用

我们实现一个计时器的例子,在点击开始计数的时候,计时器会每300ms执行一次,在点击结束计数的时候,计时器会被清除。

问题

我们发现,点击end的时候,计时器并没有被清除,这是为什么呢?

原因

这是因为组件一直在重新ReRender,所以timer的值一直在被重新赋值为null,导致无法清除计时器。

import React, { useLayoutEffect, useRef, useState } from 'react';function App() {console.log('render')let timer: NodeJS.Timeout | null = nulllet [count, setCount] = useState(0)const handleClick = () => {timer = setInterval(() => {setCount(count => count + 1)}, 300)};const handleEnd = () => {console.log(timer);if (timer) {clearInterval(timer)timer = null}};return (<div><button onClick={handleClick}>开始计数</button><button onClick={handleEnd}>结束计数</button><div>{count}</div></div>);
}export default App;
如何修改?

我们可以使用useRef来解决这个问题,因为useRef的值不会因为组件的重新渲染而改变。

import React, { useLayoutEffect, useRef, useState } from 'react';function App() {console.log('render')let timer = useRef<null | NodeJS.Timeout>(null)let [count, setCount] = useState(0)const handleClick = () => {timer.current = setInterval(() => {setCount(count => count + 1)}, 300)};const handleEnd = () => {if (timer.current) {clearInterval(timer.current)timer.current = null}};return (<div><button onClick={handleClick}>开始计数</button><button onClick={handleEnd}>结束计数</button><div>{count}</div></div>);
}export default App;

注意事项

  1. 组件在重新渲染的时候,useRef的值不会被重新初始化。

  2. 改变 ref.current 属性时,React 不会重新渲染组件。React 不知道它何时会发生改变,因为 ref 是一个普通的 JavaScript 对象。

  3. useRef的值不能作为useEffect等其他hooks的依赖项,因为它并不是一个响应式状态。

  4. useRef不能直接获取子组件的实例,需要使用forwardRef。

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

相关文章:

  • 知名响应式网站企业修改wordpress语言设置
  • 福建公司网站建设深圳南山 网站建设
  • 中文网站排名wordpress 预约
  • 广东网站开发哪家阜阳网站开发招聘
  • 网站点击按钮回到页面顶部怎么做大连网站推广价格
  • 网站建设摊销微信信息流广告投放
  • 安装网站时出现dir手机app下载网站
  • 网站流量分析的指标有哪些thinkphp制作网站开发
  • 电商网站有哪些平台wordpress中文切换
  • 福州医保网站调入申报怎么做苏州市郭巷建设局网站
  • 学生个人网站设计温州网站建设方案外包
  • 网站怎么做背景图片网站建设群发广告词
  • 建筑图集网站07fs02图集桂林微信网站设计
  • 德州网站收录建个网站需要多少钱一个
  • 怎么做58网站吊车网新型电子产品代理加盟
  • 网站推广的公司英文网站seo如何做
  • 如何建设wap网站建设厅注册中心网站考试报名费缴费
  • 网站管理助手 建设中查企业营业执照的网站
  • 秦皇岛做网站汉狮网络汽车服务站建站流程
  • 网站视频怎么做的好投百度做广告效果怎么样
  • 网站制作公司 沈阳合肥比较好的网站制作
  • 新手学做网站看什么书购物网站后台好管理吗
  • 简述企业建设网站的必要性怎么注销自己做的网站
  • 个人网站做哪种类型东莞建筑
  • 高明专业网站建设报价手机网站排名优化软件
  • 亳州网站开发公司蓝色清新phpcms企业网站模板
  • 用php做图书管理网站网站建设备案计划书
  • 高师院校语言类课程体系改革与建设 教学成果奖申报网站北京协会网站建设
  • 婚庆设备租赁网站源码建站优化公司
  • 做网站怎么租个空间wordpress页面不显示