readonly:
深度只读数据
获取一个对象 (响应式或纯对象) 或 ref 并返回原始代理的只读代理。
只读代理是深层的:访问的任何嵌套 property 也是只读的。
· shallowReadonly
浅只读数据
创建一个代理,使其自身的 property 为只读,但不执行嵌套对象的深度只读转换
应用场景:
在某些特定情况下, 我们可能不希望对数据进行更新的操作, 那就可以包装生成一个只读 代理对象来读取数据, 而不能修改或删除
·isReadonly
用于判断是不是一个readonly对象 > 返回值boolean
<template>
<div style="font-size: 14px;">
<p>{{count1}}</p>
<p>{{copyReadonlyRef}}</p>
<p>{{state}}</p>
<p>{{copyReadonlyReactive2}}</p>
<p>{{copyReadonly3}}</p>
<p>{{state3}}</p>
</div>
</template>
<script lang="ts">
/*
readonly: 深度只读数据
获取一个对象 (响应式或纯对象) 或 ref 并返回原始代理的只读代理。
只读代理是深层的:访问的任何嵌套 property 也是只读的。
shallowReadonly: 浅只读数据
创建一个代理,使其自身的 property 为只读,但不执行嵌套对象的深度只读转换
应用场景:
在某些特定情况下, 我们可能不希望对数据进行更新的操作, 那就可以包装生成一个只读代理对象来读取数据, 而不能修改或删除
isReadonly: 用于判断是不是一个readonly对象 > 返回值boolean
*/
import {
defineComponent,
reactive,
ref,
readonly,
shallowReadonly,
isReadonly,
} from 'vue'
// vue3.0版本语法
export default defineComponent({
setup () {
const count1 = ref(1)
// 原本的ref对象,使用readonly创建出一个只读对象
const copyReadonlyRef = readonly(count1)
console.log('count1',count1)
console.log('copyReadonlyRef',copyReadonlyRef)
// 原本的reactive对象,使用readonly创建出一个只读对象
const state = reactive({a: {b: 2}})
const copyReadonlyReactive2 = readonly(state)
console.log('state', state)
console.log('copyReadonlyReactive2', copyReadonlyReactive2)
// 直接创建一个readonly对象
const copyReadonly3 = readonly({x: {y: 3}})
console.log('copyReadonly3',copyReadonly3)
// 3秒后尝试改变reactive/ref对象的数据和只读对象的数据
setTimeout(() => {
count1.value += 1 // 结果为count1改变为 2
copyReadonlyRef.value += 2 // 警告: Set operation on key "value" failed: target is readonly
delete copyReadonlyRef.value // 警告: Delete operation on key "value" failed: target is readonly
state.a.b++
copyReadonlyReactive2.a.b++ // 警告: Set operation on key "count" failed: target is readonly
copyReadonly3.x.y++ // 警告: Set operation on key "count" failed: target is readonly
}, 3000)
// 定义一个shallowReadonly对象,只对自身的property进行只读转换,
// 深层的属性还是可以改变值的。
const state3 = shallowReadonly({
foo: 1,
nested: {
bar: 2
}
})
// 改变状态本身的property将失败
state3.foo++ // 警告: Set operation on key "foo" failed: target is readonly
console.log('isReadonly?state3.foo',isReadonly(state3.foo));// false
console.log('isReadonly?state3.nested',isReadonly(state3.nested));// false
console.log('shallowReadonly-state3',state3);
// 适用于嵌套对象 > 深层的属性可以改变值
state3.nested.bar++ // 结果为3 成功改变了值
return {
count1,
copyReadonlyRef,
state,
copyReadonlyReactive2,
copyReadonly3,
state3
}
}
})
</script>
可以看到shallowReadonly第一层 是只读对象想改变值 是会弹出警告,
而深层的值是可以被改变的state3.nested.bar++后 值为3了。
可以看到非readonly对象是值可以被改变的,而readonly对象包裹的无论是reactive还是ref对象都不可以改变值也不可以delete删除值。
会弹出警告⚠️
欢迎关注我的原创文章:小伙伴们!我是一名热衷于前端开发的作者,致力于分享我的知识和经验,帮助其他学习前端的小伙伴们。在我的文章中,你将会找到大量关于前端开发的精彩内容。
学习前端技术是现代互联网时代中非常重要的一项技能。无论你是想成为一名专业的前端工程师,还是仅仅对前端开发感兴趣,我的文章将能为你提供宝贵的指导和知识。
在我的文章中,你将会学到如何使用HTML、CSS和JavaScript创建精美的网页。我将深入讲解每个语言的基础知识,并提供一些实用技巧和最佳实践。无论你是初学者还是有一定经验的开发者,我的文章都能够满足你的学习需求。
此外,我还会分享一些关于前端开发的最新动态和行业趋势。互联网技术在不断发展,新的框架和工具层出不穷。通过我的文章,你将会了解到最新的前端技术趋势,并了解如何应对这些变化。
我深知学习前端不易,因此我将尽力以简洁明了的方式解释复杂的概念,并提供一些易于理解的实例和案例。我希望我的文章能够帮助你更快地理解前端开发,并提升你的技能。
如果你想了解更多关于前端开发的内容,不妨关注我的原创文章。我会不定期更新,为你带来最新的前端技术和知识。感谢你的关注和支持,我们一起探讨交流技术共同进步,期待与你一同探索前端开发的奇妙世界!
在前端开发编写html文件的时候,我们可能会很熟练的写出常见的html元素,但是如果问到某些元素的差别时,大家不一定能说的出来,今天就给大家总结一下那些很常见但容易混淆的属性。
html与css
css样式文件引入的方式有两种,分别是link标签和@import。
link语法结构
link语法结构如下,注意rel='stylesheet'属性要加上。
link语法结构
@import语法结构
当@import用在html中时,需要配合style标签
@import在html中
当@import用在css文件中,直接使用@import url()即可
@import在css中
既然link与@import都可以用来引入css,那么它们的区别是什么呢?我们又该如何选择呢?
link是XHTML标签的一种,除了可以加载css外,还可以定义其他rel属性,而@import只能用来加载css。
link标签在加载css时,与页面一同加载,而@import需要等到网页完全加载以后才进行加载。
link是XHTML标签,不存在兼容问题,而@import是在CSS2.1中提出的,对于低版本的浏览器不支持。
link标签可以通过Javascript代码去控制其属性,而@import不可以。
javascript控制link
@import支持在css文件中再次引入其他css文件,方便对多个css文件的管理。
因为@import引入的文件需要在网页完全加载后再加载,如果在网络速度较慢的情况下,会出现页面闪现,因此建议使用link标签代替@import。
html元素的readonly与disabled属性一般都是用于无法改变表单的内容,但是两者也是有区别的。
readonly属性只针对input(text,password)和textarea元素,而disabled适用于所有表单元素,包括select,radio,checkbox,button等。
在表单元素使用了disabled后,该元素的的值不会随着form的action请求传递到服务器端,而使用readonly的元素值可以传递到服务器端。
以下是一些关于两者的使用建议。
在表单中为用户预填的唯一标识码,不允许用户改动,而且需要传递到后台的使用readonly属性。
用户提交完表单元素后,等待服务器端的验证,这个过程应该将元素设为disabled,button和submit也应该设为disabled,以防止重复提交。
title属性
img标签的title属性是用来提供一些建议性的信息,在鼠标停留在上方时会显示,它对于图片来说只是一种注释性的信息,重要性偏低。
alt属性
alt属性是为不能显示图像时,用来指定替换文字,需要注意的是替换文字是用来代替文字的,而不是用来注释文字的。
属性的使用
在做图片为主的网页时,考虑到网页的SEO,应当设置图片的alt属性为图片的真实内容,而给title设置一些建议性的内容。
今天这篇文章主要将了几个html中容易混淆的属性,你有收获吗?
绍input[type="hidden"],input[type="file"]两种特殊的表单元素,readonly disabled只读属性与禁用属性的区别于使用场景。
*请认真填写需求信息,我们会在24小时内与您取得联系。