整合營(yíng)銷(xiāo)服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢(xún)熱線(xiàn):

          vue3中readonly和shallowReadonly

          readonly:

          深度只讀數(shù)據(jù)

          獲取一個(gè)對(duì)象 (響應(yīng)式或純對(duì)象) 或 ref 并返回原始代理的只讀代理。

          只讀代理是深層的:訪(fǎng)問(wèn)的任何嵌套 property 也是只讀的。

          · shallowReadonly

          淺只讀數(shù)據(jù)

          創(chuàng)建一個(gè)代理,使其自身的 property 為只讀,但不執(zhí)行嵌套對(duì)象的深度只讀轉(zhuǎn)換

          應(yīng)用場(chǎng)景:

          在某些特定情況下, 我們可能不希望對(duì)數(shù)據(jù)進(jìn)行更新的操作, 那就可以包裝生成一個(gè)只讀 代理對(duì)象來(lái)讀取數(shù)據(jù), 而不能修改或刪除

          ·isReadonly

          用于判斷是不是一個(gè)readonly對(duì)象 > 返回值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: 深度只讀數(shù)據(jù)
            獲取一個(gè)對(duì)象 (響應(yīng)式或純對(duì)象) 或 ref 并返回原始代理的只讀代理。
            只讀代理是深層的:訪(fǎng)問(wèn)的任何嵌套 property 也是只讀的。
          shallowReadonly: 淺只讀數(shù)據(jù)
            創(chuàng)建一個(gè)代理,使其自身的 property 為只讀,但不執(zhí)行嵌套對(duì)象的深度只讀轉(zhuǎn)換 
          應(yīng)用場(chǎng)景: 
            在某些特定情況下, 我們可能不希望對(duì)數(shù)據(jù)進(jìn)行更新的操作, 那就可以包裝生成一個(gè)只讀代理對(duì)象來(lái)讀取數(shù)據(jù), 而不能修改或刪除
          isReadonly: 用于判斷是不是一個(gè)readonly對(duì)象 > 返回值boolean
          */
          import {
            defineComponent,
            reactive,
            ref,
            readonly,
            shallowReadonly,
            isReadonly,
          } from 'vue'
          // vue3.0版本語(yǔ)法
          export default defineComponent({
            
            setup () {
              const count1 = ref(1)
              // 原本的ref對(duì)象,使用readonly創(chuàng)建出一個(gè)只讀對(duì)象
              const copyReadonlyRef = readonly(count1)
              console.log('count1',count1)
              console.log('copyReadonlyRef',copyReadonlyRef)
              // 原本的reactive對(duì)象,使用readonly創(chuàng)建出一個(gè)只讀對(duì)象
              const state = reactive({a: {b: 2}})
              const copyReadonlyReactive2 = readonly(state)
              console.log('state', state)
              console.log('copyReadonlyReactive2', copyReadonlyReactive2)
              // 直接創(chuàng)建一個(gè)readonly對(duì)象
              const copyReadonly3 = readonly({x: {y: 3}})
              console.log('copyReadonly3',copyReadonly3)
              // 3秒后嘗試改變r(jià)eactive/ref對(duì)象的數(shù)據(jù)和只讀對(duì)象的數(shù)據(jù)
              setTimeout(() => {
                count1.value += 1 // 結(jié)果為count1改變?yōu)?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)
              // 定義一個(gè)shallowReadonly對(duì)象,只對(duì)自身的property進(jìn)行只讀轉(zhuǎn)換,
              // 深層的屬性還是可以改變值的。
              const state3 = shallowReadonly({
                foo: 1,
                nested: {
                  bar: 2
                }
              })
              // 改變狀態(tài)本身的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);
              
              // 適用于嵌套對(duì)象 > 深層的屬性可以改變值
              state3.nested.bar++ // 結(jié)果為3 成功改變了值
              
              return {
                count1,
                copyReadonlyRef,
                state,
                copyReadonlyReactive2,
                copyReadonly3,
                state3
              }
            }
          })
          </script>

          初始化頁(yè)面及數(shù)據(jù):

          可以看到shallowReadonly第一層 是只讀對(duì)象想改變值 是會(huì)彈出警告,

          而深層的值是可以被改變的state3.nested.bar++后 值為3了。

          3秒后的數(shù)據(jù)操作更新頁(yè)面:

          可以看到非readonly對(duì)象是值可以被改變的,而readonly對(duì)象包裹的無(wú)論是reactive還是ref對(duì)象都不可以改變值也不可以delete刪除值。

          會(huì)彈出警告??

          歡迎關(guān)注我的原創(chuàng)文章:小伙伴們!我是一名熱衷于前端開(kāi)發(fā)的作者,致力于分享我的知識(shí)和經(jīng)驗(yàn),幫助其他學(xué)習(xí)前端的小伙伴們。在我的文章中,你將會(huì)找到大量關(guān)于前端開(kāi)發(fā)的精彩內(nèi)容。

          學(xué)習(xí)前端技術(shù)是現(xiàn)代互聯(lián)網(wǎng)時(shí)代中非常重要的一項(xiàng)技能。無(wú)論你是想成為一名專(zhuān)業(yè)的前端工程師,還是僅僅對(duì)前端開(kāi)發(fā)感興趣,我的文章將能為你提供寶貴的指導(dǎo)和知識(shí)。

          在我的文章中,你將會(huì)學(xué)到如何使用HTML、CSS和JavaScript創(chuàng)建精美的網(wǎng)頁(yè)。我將深入講解每個(gè)語(yǔ)言的基礎(chǔ)知識(shí),并提供一些實(shí)用技巧和最佳實(shí)踐。無(wú)論你是初學(xué)者還是有一定經(jīng)驗(yàn)的開(kāi)發(fā)者,我的文章都能夠滿(mǎn)足你的學(xué)習(xí)需求。

          此外,我還會(huì)分享一些關(guān)于前端開(kāi)發(fā)的最新動(dòng)態(tài)和行業(yè)趨勢(shì)。互聯(lián)網(wǎng)技術(shù)在不斷發(fā)展,新的框架和工具層出不窮。通過(guò)我的文章,你將會(huì)了解到最新的前端技術(shù)趨勢(shì),并了解如何應(yīng)對(duì)這些變化。

          我深知學(xué)習(xí)前端不易,因此我將盡力以簡(jiǎn)潔明了的方式解釋復(fù)雜的概念,并提供一些易于理解的實(shí)例和案例。我希望我的文章能夠幫助你更快地理解前端開(kāi)發(fā),并提升你的技能。

          如果你想了解更多關(guān)于前端開(kāi)發(fā)的內(nèi)容,不妨關(guān)注我的原創(chuàng)文章。我會(huì)不定期更新,為你帶來(lái)最新的前端技術(shù)和知識(shí)。感謝你的關(guān)注和支持,我們一起探討交流技術(shù)共同進(jìn)步,期待與你一同探索前端開(kāi)發(fā)的奇妙世界!


          在前端開(kāi)發(fā)編寫(xiě)html文件的時(shí)候,我們可能會(huì)很熟練的寫(xiě)出常見(jiàn)的html元素,但是如果問(wèn)到某些元素的差別時(shí),大家不一定能說(shuō)的出來(lái),今天就給大家總結(jié)一下那些很常見(jiàn)但容易混淆的屬性。

          html與css

          css引入

          css樣式文件引入的方式有兩種,分別是link標(biāo)簽和@import。

          • link語(yǔ)法結(jié)構(gòu)

          link語(yǔ)法結(jié)構(gòu)如下,注意rel='stylesheet'屬性要加上。

          link語(yǔ)法結(jié)構(gòu)

          • @import語(yǔ)法結(jié)構(gòu)

          當(dāng)@import用在html中時(shí),需要配合style標(biāo)簽

          @import在html中

          當(dāng)@import用在css文件中,直接使用@import url()即可

          @import在css中

          link與@import的區(qū)別與選擇

          既然link與@import都可以用來(lái)引入css,那么它們的區(qū)別是什么呢?我們又該如何選擇呢?

          • link是XHTML標(biāo)簽的一種,除了可以加載css外,還可以定義其他rel屬性,而@import只能用來(lái)加載css。

          • link標(biāo)簽在加載css時(shí),與頁(yè)面一同加載,而@import需要等到網(wǎng)頁(yè)完全加載以后才進(jìn)行加載。

          • link是XHTML標(biāo)簽,不存在兼容問(wèn)題,而@import是在CSS2.1中提出的,對(duì)于低版本的瀏覽器不支持。

          • link標(biāo)簽可以通過(guò)Javascript代碼去控制其屬性,而@import不可以。

          javascript控制link

          • @import支持在css文件中再次引入其他css文件,方便對(duì)多個(gè)css文件的管理。

          因?yàn)锧import引入的文件需要在網(wǎng)頁(yè)完全加載后再加載,如果在網(wǎng)絡(luò)速度較慢的情況下,會(huì)出現(xiàn)頁(yè)面閃現(xiàn),因此建議使用link標(biāo)簽代替@import。

          readonly與disabled屬性

          html元素的readonly與disabled屬性一般都是用于無(wú)法改變表單的內(nèi)容,但是兩者也是有區(qū)別的。

          • readonly屬性只針對(duì)input(text,password)和textarea元素,而disabled適用于所有表單元素,包括select,radio,checkbox,button等。

          • 在表單元素使用了disabled后,該元素的的值不會(huì)隨著form的action請(qǐng)求傳遞到服務(wù)器端,而使用readonly的元素值可以傳遞到服務(wù)器端。

          以下是一些關(guān)于兩者的使用建議。

          • 在表單中為用戶(hù)預(yù)填的唯一標(biāo)識(shí)碼,不允許用戶(hù)改動(dòng),而且需要傳遞到后臺(tái)的使用readonly屬性。

          • 用戶(hù)提交完表單元素后,等待服務(wù)器端的驗(yàn)證,這個(gè)過(guò)程應(yīng)該將元素設(shè)為disabled,button和submit也應(yīng)該設(shè)為disabled,以防止重復(fù)提交。

          img元素的title和alt屬性

          • title屬性

          img標(biāo)簽的title屬性是用來(lái)提供一些建議性的信息,在鼠標(biāo)停留在上方時(shí)會(huì)顯示,它對(duì)于圖片來(lái)說(shuō)只是一種注釋性的信息,重要性偏低。

          • alt屬性

          alt屬性是為不能顯示圖像時(shí),用來(lái)指定替換文字,需要注意的是替換文字是用來(lái)代替文字的,而不是用來(lái)注釋文字的。

          • 屬性的使用

          在做圖片為主的網(wǎng)頁(yè)時(shí),考慮到網(wǎng)頁(yè)的SEO,應(yīng)當(dāng)設(shè)置圖片的alt屬性為圖片的真實(shí)內(nèi)容,而給title設(shè)置一些建議性的內(nèi)容。

          總結(jié)

          今天這篇文章主要將了幾個(gè)html中容易混淆的屬性,你有收獲嗎?

          紹input[type="hidden"],input[type="file"]兩種特殊的表單元素,readonly disabled只讀屬性與禁用屬性的區(qū)別于使用場(chǎng)景。


          主站蜘蛛池模板: 国产亚洲情侣一区二区无码AV| 亚洲一区二区三区播放在线| 青娱乐国产官网极品一区| 精品成人一区二区三区四区| 午夜AV内射一区二区三区红桃视 | 亚洲国产精品第一区二区三区| 亚洲一区二区三区偷拍女厕| 日韩久久精品一区二区三区| 亚洲国产一区二区三区 | 亚洲AV无码一区二区三区国产 | 成人区精品一区二区不卡亚洲| 亚洲国产激情一区二区三区 | 国产AV国片精品一区二区| av无码免费一区二区三区| 国产一区二区在线视频| 国产免费无码一区二区| 一级特黄性色生活片一区二区| 国内精品一区二区三区在线观看| 亚洲国产成人久久一区二区三区| 天堂Av无码Av一区二区三区| 中文字幕一区二区精品区| 人妻少妇精品视频一区二区三区| 少妇激情AV一区二区三区| 色婷婷av一区二区三区仙踪林| tom影院亚洲国产一区二区| 日本内射精品一区二区视频 | 久久精品一区二区三区日韩| 亚洲国产系列一区二区三区| 国产福利91精品一区二区三区| 无码毛片视频一区二区本码| 精品无码国产一区二区三区AV| 一区二区在线免费观看| 亚洲AV无码片一区二区三区| 久久精品日韩一区国产二区| 波多野结衣中文字幕一区二区三区| 日韩AV在线不卡一区二区三区 | 一区二区三区杨幂在线观看| 国产精品主播一区二区| 精品久久一区二区三区| 亚洲午夜一区二区三区| 日本人真淫视频一区二区三区 |