ref和reactive
创始人
2025-01-16 00:33:29
0

Vue

ref

在Vue 3中,ref有两个不同的用法:一个是用于模板中引用DOM元素或组件实例的ref属性,另一个是用于创建响应式数据的ref函数

1.DOM引用:在模板中使用ref属性,随后可以在mounted生命周期钩子中访问DOM节点。(vue2和vue3都有)是一种直接在模板中使用的指令。

   

响应式引用:通过ref函数创建一个响应式引用,当其值变化时,视图会自动更新(vue3引入),是用于创建响应式数据的工具。

   

reactive

reactive用于创建一个响应式对象。当对象的属性变化时,视图会自动更新。

   

vue中ref和reactive区别

ref用于创建一个单一的响应式值。它可以是基本类型(如数字、字符串)或对象,基本类型需要通过.value访问和修改

const user = ref({ name: 'John', age: 30 }); console.log(user.value.name);

reactive用于创建一个深度响应式对象,直接访问和修改属性

const state = reactive({   count: 0,   user: {     name: 'John',     age: 30   } }); console.log(state.count,state.user.name);

React

ref

   ref主要用于引用DOM元素或组件实例,通常使用useRef钩子来创建。它的主要用途是直接操作DOM元素,获取DOM节点或保持某些可变的值(这值的变化不会触发组件重新渲染)。

函数组件

1.创建和使用ref来引用DOM元素

import React, { useRef, useEffect } from 'react';  function MyComponent() {   const myDivRef = useRef(null);    useEffect(() => {     console.log(myDivRef.current); // 输出 
Hello, World!
myDivRef.current.style.backgroundColor = 'yellow'; // 修改样式 }, []); return
Hello, World!
; }

 2.保持不需要触发重新渲染的可变值

import React, { useRef } from 'react';  function Timer() {   const count = useRef(0);    const increment = () => {     count.current++;     console.log(count.current);   };    return ; } 

尽管useRef不会引发组件重新渲染,但它在处理以下情况时非常有用:

  • 引用和操作DOM元素。
  • 保持跨渲染周期的可变值,而不需要重新渲染组件。例如,保持计时器的ID,记录组件实例的一些信息,或在事件处理函数中使用。
  • 保存前一个渲染的值。
  • 避免闭包陷阱,在事件处理函数或异步函数中引用最新的值。

类组件

1、回调函数形式的ref

import React, { Component } from 'react';  class SearchComponent extends Component {   handleSearch = () => {     const keyword = this.keyWordElement.value;     console.log('搜索关键词:', keyword);     // 你可以在这里使用keyword进行搜索操作   };    render() {     return (       
this.keyWordElement = c} type="text" placeholder="输入关键词点击搜索" />
); } } export default SearchComponent;

回调函数形式的ref

  • ref属性接受一个回调函数,该函数在组件挂载或更新时执行。回调函数会传递当前的DOM元素作为参数
  • c是当前的DOM元素。通过将c赋值给this.keyWordElement,你在组件实例上创建了一个引用,指向这个DOM元素。这样做的结果是,可以在类组件的其他方法中通过this.keyWordElement来访问和操作这个DOM元素。

2. React.createRef()

import React, { Component } from 'react';  class SearchComponent extends Component {   constructor(props) {     super(props);     //创建ref     this.keyWordElement = React.createRef();   }    handleSearch = () => {     //访问ref:通过this.refName.current来访问DOM元素或组件实例     const keyword = this.keyWordElement.current.value;   };    render() {     return (       
{*分配ref:在render方法中,将创建的ref对象赋值给JSX元素的ref属性*}
); } } export default SearchComponent;

useState和useReducer代替reactive

useState:用于创建和管理组件的局部状态

import React, { useState } from 'react';  function Counter() {   const [count, setCount] = useState(0);    return (     

{count}

); }

useReducer:用于管理复杂的状态逻辑,类似于Redux的reducer概念。

import React, { useReducer } from 'react';  const initialState = { count: 0 };  function reducer(state, action) {   switch (action.type) {     case 'increment':       return { count: state.count + 1 };     default:       throw new Error();   } }  function Counter() {   const [state, dispatch] = useReducer(reducer, initialState);    return (     

{state.count}

); }

使用useStateuseReducer修改状态会触发组件重新渲染

关注我,不迷路!!!

相关内容

热门资讯

盘点一款!卡农大厅辅助,菜鸟黑... 盘点一款!卡农大厅辅助,菜鸟黑桃a3作弊,法门教程(有挂攻略)1、下载好卡农大厅辅助正确养号方法之后...
技术分享!广东闲来辅助神器免费... 技术分享!广东闲来辅助神器免费版,捉住捣蛋鸡作弊,举措教程(有挂详情)1、超多福利:超高返利,海量正...
必知教程!仟众部落辅助,冰球突... 必知教程!仟众部落辅助,冰球突破辅助软件,方案教程(果真有挂)1、完成仟众部落辅助辅助器v3.3的残...
最新研发!吉祥填大坑有插件吗,... 最新研发!吉祥填大坑有插件吗,四川途游破解安装包,大纲教程(有挂细节)1、四川途游破解安装包脚本辅助...
一分钟揭秘!吉祥填大坑辅助器攻... 一分钟揭秘!吉祥填大坑辅助器攻略,指尖四川辅助破解版,练习教程(有挂工具)1、吉祥填大坑辅助器攻略有...
总算了解!凑一桌小程序辅助器,... 总算了解!凑一桌小程序辅助器,开心游戏快跑辅助,办法教程(有挂助手)1、任何凑一桌小程序辅助器透视是...
一起来讨论!开心庄园脚本辅助器... 一起来讨论!开心庄园脚本辅助器,全来潜山跑风辅助器,妙计教程(有挂技巧)1、玩家可以在全来潜山跑风辅...
每日必备!朋友局app辅助器下... 每日必备!朋友局app辅助器下载,爱玩娱乐暗堡辅助,机巧教程(真的有挂)1)朋友局app辅助器下载辅...
终于清楚!蜀山四川小程序破解版... 终于清楚!蜀山四川小程序破解版下载,拱趴大菠萝技巧,步骤教程(竟然有挂)1、不需要AI权限,帮助你快...
大神推荐!潮友会辅助器,多乐辅... 大神推荐!潮友会辅助器,多乐辅助器免费版,手册教程(有挂实锤)1)潮友会辅助器有没有挂:进一步探索潮...