admin 管理员组

文章数量: 887032


2024年1月5日发(作者:清除button的默认样式)

原理和usestate

原理和useState

Vue Set原理

()是Vue的一个公用方法,它被用于在Vue实例中新建一个响应式属性。()为对象添加了一个响应式属性,并且它是响应式的,这意味着当属性的值发生改变时,也会自动更新视图。

语法:

(object, key, value)

参数:

object: 必需。对象。

key: 必需。对象的属性。

value: 必需。属性的值。

使用()非常灵活,可以用于在视图和脚本中同步数据,尤其在当数据层和视图层不在同一个组件中时,使用()可以保证数据的同步。

vue中的数据绑定是根据对象的引用进行的,当对象引用不变时,数据绑定才有效。因此,我们如果想要对一个对象中的属性进行修改时,需要使用()方法。

()的实现原理:

在Vue2.x中,数据响应式的实现原理是使用了ES5的Property()方法对对象进行劫持,从而实现监听。

当我们为一个对象添加一个属性时, 如果这个对象是一个响应式对象, 该属性应该是响应式的。Vue2.0通过Property实现数据响应式,从而利用了这个方法,通过它来指定getter、setter来拦截此属性的读写操作。

Vue通过为每个响应式对象记录一个dep来追踪这些依赖关系,在getter函数中收集依赖,在setter函数中通知依赖更新,这个过程被称为“依赖收集”。

而当我们通过()方法添加属性时,Vue内部实现可能如下:

(, 0, {id: 1, name: 'John'}):

1. 判断对象vm是否是响应式对象

2. 如果是响应式对象,则为对象vm添加一个属性_deps。对象_deps是一个数组,它内部存储了订阅了vm这个响应式对象的Watcher。当响应式对象的数据发生变化时,我们需要通知订阅了这个响应式对象的Watcher执行更新操作,_deps数组就是用来存放Watch的

3. 获取第一个参数的长度length,如果该对象的当前属性值为数组,则将的下标0的响应式属性值修改为{id: 1, name: 'John'}

4. 如果vm和不是响应式对象,则不进行任何的操作。

5. 如果vm和是响应式的对象,则通知的绑定Watcher执行更新操作。

Vue Set原理示例:

首先,需要构建一个Vue实例。在实例化过程中,进行data数据初始化。将需要修改的响应式变量作为data对象中的属性进行初始化。

新建一个Vue实例:

var vm = new Vue({ el: '#app', data:

{ student: { name: 'Alice', age:

20, gender: 'female', } } })

使用()方法新增属性(如:address),并给该属性设置一个值('BJ'):

(t, 'address', 'BJ')

这样,新加入的address属性将被添加监听,当发生改变时,同时也会更新视图。

使用()方法对原属性(如:gender)进行修改(如,对gender进行重新赋值):

(t, 'gender', 'male')

这样,被修改的gender属性将会被重新添加监听,也将会同样更新视图。

useState

useState是React Hooks提供的一种状态管理方法,它是React函数式组件中的重要概念。useState用于定义useState钩子,以获取React函数组件的状态。它可以帮助React函数组件维持内部一些多次渲染之间的状态,例如:输入框的值或复选框的勾选状态等等。

useState不是一种数据类型或一个对象,它是一个

Hook,更具体地说,useState是一个函数,而且在函数组件中必须导入它的库,才能使用它。

它的语法形式如下:

useState(initialState)

useState方法的返回值是一个数组,它包含状态和更新状态的函数。useState的作用是为函数组件提供一个声明式且可复用的状态管理器。

useState方法的参数是状态的初始值,可以是一个简单的数据类型,一个字符串,一个数字等。

使用useState:

我们可以使用useState Hook来定义一个简单的state:

import React, { useState } from 'react';

function Example() { // 声明一个叫 "count" 的

state 变量 const [count, setCount] = useState(0);

return (

You clicked

{count} times

); }

在上面的例子中,我们调用了useState Hook来初始化状态变量count,并使用setCount方法更新状态变量count的值。

当用户点击按钮时,我们更新状态变量count的值,并将其打印到页面上。

总结:

()方法可以让Vue实例对象的属性重新绑定,同时也可以监听对象属性的变化,当属性值发生变化时,视图自动更新。

而useState是React Hooks中的一个钩子,可以使用它来定义、管理函数组件的状态。它可以让React函数组件维护内部一些多次渲染之间的状态,例如:输入框的值或复选框的勾选状态等等。


本文标签: 对象 属性 响应 状态 函数