国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Vue】學(xué)習(xí)筆記-列表渲染/數(shù)據(jù)監(jiān)視

這篇具有很好參考價(jià)值的文章主要介紹了【Vue】學(xué)習(xí)筆記-列表渲染/數(shù)據(jù)監(jiān)視。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

基本列表

v-for指令

  1. 用于展示列表數(shù)據(jù)
  2. 語法:v-for=“(item,index) in xxx” :key=“yyy”
  3. 可遍歷:數(shù)組,對(duì)象,字符串(用的很少),指定次數(shù)(用的很少)
        <div id="root">
             <!--遍歷數(shù)組-->
            <ul>
                <h3>遍歷數(shù)組</h3>
                <li v-for="p in persons " :key="p.id">
                    {{p.name}}-{{p.age}}
                </li>
                <h3>遍歷數(shù)組-index</h3>
                <li v-for="(p,index)  in  persons" :key="index">
                    {{p.name}}--{{p.age}}-{{index}}
                </li>
            </ul>

            <!--遍歷對(duì)象-->
            <ul>
                <h3>遍歷對(duì)象</h3>
                <li v-for="(value,k) of car" :key="k">
                    {{k}}-{{value}}
                </li>
            </ul>

           <!--遍歷字符串-->
            <ul>
                <h3>遍歷字符串</h3>
                <li v-for="(char,index) of str" :key="index">
                    {{char}}-{{index}}
                </li>
            </ul>

            <!--測(cè)試遍歷指定次數(shù)-->
            <ul>
                <h3>測(cè)試遍歷指定次數(shù)</h3>
                <li v-for="(number,index) of 5" :key="index">
                    {{number}}-{{index}}
                </li>
            </ul>           
        </div>
        <script type="text/javascript">
            Vue.config.productionTip =false 阻止Vue啟動(dòng)時(shí)生成提示
            //創(chuàng)建Vue實(shí)列
            const vm=new Vue({
                el:'#root', //el 用于指定當(dāng)前Vue實(shí)例未哪個(gè)容器服務(wù),值通常為css選擇器字符串。document.getElementById(root) 
                data: {
                    persons:[
                        {id:001,name:"張三",age:18},
                        {id:002,name:"李四",age:19},
                        {id:003,name:"王五",age:20}
                    ],
                    car:{
                        name:'奧迪A8',
                        price:'70萬',
                        color:'黑色'
                    },
                    str:"hello" 

                }
            });
    
        </script>

【Vue】學(xué)習(xí)筆記-列表渲染/數(shù)據(jù)監(jiān)視

Key的作用與原理

原理:
【Vue】學(xué)習(xí)筆記-列表渲染/數(shù)據(jù)監(jiān)視
【Vue】學(xué)習(xí)筆記-列表渲染/數(shù)據(jù)監(jiān)視
面試題:react. vue中的key有什么用?(key的內(nèi)部原理)

  1. 虛擬Dom中key的作用:
  • key是虛擬DOM對(duì)象的標(biāo)識(shí),檔數(shù)據(jù)發(fā)生改變時(shí),Vue會(huì)根據(jù)【新數(shù)據(jù)】生成【新的虛擬DOM】,
  • 隨后Vue進(jìn)行【新虛擬DOM】與【舊虛擬DOM】的差異比較,比較規(guī)則如下:
  1. 對(duì)比規(guī)則:
    (1)舊虛擬DOM中找到了與虛擬DOM相同的key:
    1. 若虛擬DOM中內(nèi)容沒有變,直接使用之前的真實(shí)DOM!
    2. 若虛擬DOM中內(nèi)容變了,則生成新的真實(shí)DOM,隨后替換掉頁面中之前的真實(shí)DOM
    (2)舊虛擬DOM中未找到與新虛擬DOM相同的key
    創(chuàng)建新的真實(shí)的DOM。隨后渲染到頁面。
  2. 用index作為key可能會(huì)引發(fā)的問題:
    1. 若對(duì)數(shù)據(jù)進(jìn)行:逆序添加,逆序刪除等破壞順序操作:
    會(huì)產(chǎn)生沒有必要的真實(shí)DOM更新==> 界面效果沒問題,但效率低
    2.如果結(jié)構(gòu)中還包含輸入類的DOM:
    會(huì)產(chǎn)生錯(cuò)誤DOM更新==》界面有問題
  3. 開發(fā)中如何選擇key
    1.最好使用每條數(shù)據(jù)的唯一標(biāo)識(shí)作為key,比如id,手機(jī)號(hào),身份證,學(xué)號(hào)等唯一值。
    2.如果不存在對(duì)數(shù)據(jù)的逆序添加,逆序刪除等破壞順序操作。僅用于渲染列表用于展示。
    使用index作為leuy是沒有問題的。
        <div id="root">
             <!--遍歷數(shù)組-->
             <h3>遍歷數(shù)組</h3>
             <button @click.once="add">添加一個(gè)老劉</button>
            <ul>
              
                <li v-for="p in persons " :key="p.id">
                    {{p.name}}-{{p.age}}
                    <input type="text">
                </li>
            </ul>         
        </div>
        <script type="text/javascript">
            Vue.config.productionTip =false 阻止Vue啟動(dòng)時(shí)生成提示
            //創(chuàng)建Vue實(shí)列
            const vm=new Vue({
                el:'#root', 
                data: {
                    persons:[
                        {id:001,name:"張三",age:18},
                        {id:002,name:"李四",age:19},
                        {id:003,name:"王五",age:20}
                    ]
                },
                methods:{
                    add(){
                        const p=  {id:004,name:"老劉",age:40}
                        this.persons.unshift(p)
                    }
                }
            });
    
        </script>

【Vue】學(xué)習(xí)筆記-列表渲染/數(shù)據(jù)監(jiān)視

列表過濾

		<!-- 準(zhǔn)備好一個(gè)容器-->
		<div id="root">
			<h2>人員列表</h2>
			<input type="text" placeholder="請(qǐng)輸入名字" v-model="keyWord">
			<ul>
				<li v-for="(p,index) of filPerons" :key="index">
					{{p.name}}-{{p.age}}-{{p.sex}}
				</li>
			</ul>
		</div>
		<script type="text/javascript">
			Vue.config.productionTip = false
			
			//用watch實(shí)現(xiàn)
			//#region 
			/* new Vue({
				el:'#root',
				data:{
					keyWord:'',
					persons:[
						{id:'001',name:'馬冬梅',age:19,sex:'女'},
						{id:'002',name:'周冬雨',age:20,sex:'女'},
						{id:'003',name:'周杰倫',age:21,sex:'男'},
						{id:'004',name:'溫兆倫',age:22,sex:'男'}
					],
					filPerons:[]
				},
				watch:{
					keyWord:{
						immediate:true,
						handler(val){
							this.filPerons = this.persons.filter((p)=>{
								return p.name.indexOf(val) !== -1
							})
						}
					}
				}
			}) */
			//#endregion
			
			//用computed實(shí)現(xiàn)
			new Vue({
				el:'#root',
				data:{
					keyWord:'',
					persons:[
						{id:'001',name:'馬冬梅',age:19,sex:'女'},
						{id:'002',name:'周冬雨',age:20,sex:'女'},
						{id:'003',name:'周杰倫',age:21,sex:'男'},
						{id:'004',name:'溫兆倫',age:22,sex:'男'}
					]
				},
				computed:{
					filPerons(){
						return this.persons.filter((p)=>{
							return p.name.indexOf(this.keyWord) !== -1
						})
					}
				}
			}) 
		</script>

列表排序

		<div id="root">
			<h2>人員列表</h2>
			<input type="text" placeholder="請(qǐng)輸入名字" v-model="keyWord">
			<button @click="sortType = 2">年齡升序</button>
			<button @click="sortType = 1">年齡降序</button>
			<button @click="sortType = 0">原順序</button>
			<ul>
				<li v-for="(p,index) of filPerons" :key="p.id">
					{{p.name}}-{{p.age}}-{{p.sex}}
					<input type="text">
				</li>
			</ul>
		</div>

		<script type="text/javascript">
			Vue.config.productionTip = false
			
			new Vue({
				el:'#root',
				data:{
					keyWord:'',
					sortType:0, //0原順序 1降序 2升序
					persons:[
						{id:'001',name:'馬冬梅',age:30,sex:'女'},
						{id:'002',name:'周冬雨',age:31,sex:'女'},
						{id:'003',name:'周杰倫',age:18,sex:'男'},
						{id:'004',name:'溫兆倫',age:19,sex:'男'}
					]
				},
				computed:{
					filPerons(){
						const arr = this.persons.filter((p)=>{
							return p.name.indexOf(this.keyWord) !== -1
						})
						//判斷一下是否需要排序
						if(this.sortType){
							arr.sort((p1,p2)=>{
								return this.sortType === 1 ? p2.age-p1.age : p1.age-p2.age
							})
						}
						return arr
					}
				}
			}) 

		</script>

【Vue】學(xué)習(xí)筆記-列表渲染/數(shù)據(jù)監(jiān)視

Vue 數(shù)據(jù)監(jiān)視

更新時(shí)的一個(gè)問題
this.persons[0] = {id:‘001’,name:‘馬老師’,age:50,sex:‘男’} 更改data數(shù)據(jù),Vue不監(jiān)聽,模板不改變。

		<div id="root">
			<h2>人員列表</h2>
			<button @click="updateMei">更新馬冬梅的信息</button>
			<ul>
				<li v-for="(p,index) of persons" :key="p.id">
					{{p.name}}-{{p.age}}-{{p.sex}}
				</li>
			</ul>
		</div>
		<script type="text/javascript">
			Vue.config.productionTip = false
			
			const vm = new Vue({
				el:'#root',
				data:{
					persons:[
						{id:'001',name:'馬冬梅',age:30,sex:'女'},
						{id:'002',name:'周冬雨',age:31,sex:'女'},
						{id:'003',name:'周杰倫',age:18,sex:'男'},
						{id:'004',name:'溫兆倫',age:19,sex:'男'}
					]
				},
				methods: {
					updateMei(){
						// this.persons[0].name = '馬老師' //奏效
						// this.persons[0].age = 50 //奏效
						// this.persons[0].sex = '男' //奏效
						// this.persons[0] = {id:'001',name:'馬老師',age:50,sex:'男'} //不奏效
						this.persons.splice(0,1,{id:'001',name:'馬老師',age:50,sex:'男'})
					}
				}
			}) 

		</script>

模擬數(shù)據(jù)監(jiān)測(cè):

		<script type="text/javascript" >

			let data = {
				name:'尚硅谷',
				address:'北京',
			}

			//創(chuàng)建一個(gè)監(jiān)視的實(shí)例對(duì)象,用于監(jiān)視data中屬性的變化
			const obs = new Observer(data)		
			console.log(obs)	

			//準(zhǔn)備一個(gè)vm實(shí)例對(duì)象
			let vm = {}
			vm._data = data = obs

			function Observer(obj){
				//匯總對(duì)象中所有的屬性形成一個(gè)數(shù)組
				const keys = Object.keys(obj)
				//遍歷
				keys.forEach((k)=>{
					Object.defineProperty(this,k,{
						get(){
							return obj[k]
						},
						set(val){
							console.log(`${k}被改了,我要去解析模板,生成虛擬DOM.....我要開始忙了`)
							obj[k] = val
						}
					})
				})
			}
			
		</script>

【Vue】學(xué)習(xí)筆記-列表渲染/數(shù)據(jù)監(jiān)視

原理

Vue監(jiān)視數(shù)據(jù)的原理:

  1. vue會(huì)監(jiān)視data中所有層次的數(shù)據(jù)。

  2. 如何監(jiān)測(cè)對(duì)象中的數(shù)據(jù)?
    通過setter實(shí)現(xiàn)監(jiān)視,且要在new Vue時(shí)就傳入要監(jiān)測(cè)的數(shù)據(jù)。
    (1).對(duì)象中后追加的屬性,Vue默認(rèn)不做響應(yīng)式處理
    (2).如需給后添加的屬性做響應(yīng)式,請(qǐng)使用如下API:
    Vue.set(target,propertyName/index,value)
    vm.$set(target,propertyName/index,value)

  3. 如何監(jiān)測(cè)數(shù)組中的數(shù)據(jù)?
    通過包裹數(shù)組更新元素的方法實(shí)現(xiàn),本質(zhì)就是做了兩件事:
    (1).調(diào)用原生對(duì)應(yīng)的方法對(duì)數(shù)組進(jìn)行更新。
    (2).重新解析模板,進(jìn)而更新頁面。

  4. 在Vue修改數(shù)組中的某個(gè)元素一定要用如下方法:
    1.使用這些API:push()、pop()、shift()、unshift()、splice()sort()、reverse()
    2.Vue.set() 或 vm.$set()

特別注意:Vue.set() 和 vm.$set() 不能給vm 或 vm的根數(shù)據(jù)對(duì)象 添加屬性!??!

	<body>
		<!-- 準(zhǔn)備好一個(gè)容器-->
		<div id="root">
			<h1>學(xué)生信息</h1>
			<button @click="student.age++">年齡+1歲</button> <br/>
			<button @click="addSex">添加性別屬性,默認(rèn)值:男</button> <br/>
			<button @click="student.sex = '未知' ">修改性別</button> <br/>
			<button @click="addFriend">在列表首位添加一個(gè)朋友</button> <br/>
			<button @click="updateFirstFriendName">修改第一個(gè)朋友的名字為:張三</button> <br/>
			<button @click="addHobby">添加一個(gè)愛好</button> <br/>
			<button @click="updateHobby">修改第一個(gè)愛好為:開車</button> <br/>
			<button @click="removeSmoke">過濾掉愛好中的抽煙</button> <br/>
			<h3>姓名:{{student.name}}</h3>
			<h3>年齡:{{student.age}}</h3>
			<h3 v-if="student.sex">性別:{{student.sex}}</h3>
			<h3>愛好:</h3>
			<ul>
				<li v-for="(h,index) in student.hobby" :key="index">
					{{h}}
				</li>
			</ul>
			<h3>朋友們:</h3>
			<ul>
				<li v-for="(f,index) in student.friends" :key="index">
					{{f.name}}--{{f.age}}
				</li>
			</ul>
		</div>
	</body>

	<script type="text/javascript">
		Vue.config.productionTip = false //阻止 vue 在啟動(dòng)時(shí)生成生產(chǎn)提示。

		const vm = new Vue({
			el:'#root',
			data:{
				student:{
					name:'tom',
					age:18,
					hobby:['抽煙','喝酒','燙頭'],
					friends:[
						{name:'jerry',age:35},
						{name:'tony',age:36}
					]
				}
			},
			methods: {
				addSex(){
					// Vue.set(this.student,'sex','男')
					this.$set(this.student,'sex','男')
				},
				addFriend(){
					this.student.friends.unshift({name:'jack',age:70})
				},
				updateFirstFriendName(){
					this.student.friends[0].name = '張三'
				},
				addHobby(){
					this.student.hobby.push('學(xué)習(xí)')
				},
				updateHobby(){
					// this.student.hobby.splice(0,1,'開車')
					// Vue.set(this.student.hobby,0,'開車')
					this.$set(this.student.hobby,0,'開車')
				},
				removeSmoke(){
					this.student.hobby = this.student.hobby.filter((h)=>{
						return h !== '抽煙'
					})
				}
			}
		})
	</script>

【Vue】學(xué)習(xí)筆記-列表渲染/數(shù)據(jù)監(jiān)視文章來源地址http://www.zghlxwxcb.cn/news/detail-424253.html

到了這里,關(guān)于【Vue】學(xué)習(xí)筆記-列表渲染/數(shù)據(jù)監(jiān)視的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【學(xué)習(xí)筆記】Vue3源碼解析:第五部分 - 實(shí)現(xiàn)渲染(2)

    【學(xué)習(xí)筆記】Vue3源碼解析:第五部分 - 實(shí)現(xiàn)渲染(2)

    課程地址:【已完結(jié)】全網(wǎng)最詳細(xì)Vue3源碼解析?。ㄒ恍行袔闶謱慥ue3源碼) 第五部分-:(對(duì)應(yīng)課程的第33 - 35節(jié)) 第33節(jié):《講解組件渲染流程》 1、在 render 函數(shù)中拿到虛擬dom vnode后,編寫patch函數(shù),它接收3個(gè)參數(shù):null、vnode、container,分別代表:上一次的虛擬dom即舊的虛

    2024年04月23日
    瀏覽(27)
  • 【Vue3】2-8 : 條件渲染與列表渲染及注意點(diǎn)

    【Vue3】2-8 : 條件渲染與列表渲染及注意點(diǎn)

    一、條件渲染 -?v-if = 表達(dá)式 1.1 真值與假值 1.2 ?v-if ,v-else-if?,v-else 1.3 ?實(shí)戰(zhàn):isShow1 為真值時(shí) 顯示 bbbbb >??代碼 >??效果 二、列表渲染 -?v-for 2.1 渲染 - 數(shù)組 >??代碼 >??效果 2.2 渲染 - 對(duì)象 >??代碼 >??效果 2.3 渲染 - 整數(shù) ?>??代碼 >??效果 2.3 渲染 - 文本

    2024年02月02日
    瀏覽(12)
  • 零基礎(chǔ)入門Vue之影分身之術(shù)——列表渲染&渲染原理淺析

    從 條件渲染 那一篇,我學(xué)習(xí)到了如何用Vue對(duì)dom節(jié)點(diǎn)根據(jù)條件顯示 但單單有條件還不夠啊,有時(shí)候數(shù)據(jù)是一大坨一大坨的數(shù)據(jù),如果Vue不提供咱要么使用“v-html” 要么就沒辦法實(shí)現(xiàn) v-html又感覺太low了,Vue提供了另外的指令更好的實(shí)現(xiàn),那便是:列表渲染 簡單的列表渲染可以

    2024年02月19日
    瀏覽(19)
  • Vue2 第五節(jié) class與style綁定,條件渲染和列表渲染

    Vue2 第五節(jié) class與style綁定,條件渲染和列表渲染

    1.class與style綁定 2.條件渲染 3.列表渲染 (1)綁定class 就是用v-bind綁定一個(gè)class 有三種不同的寫法 1. 字符串寫法:適用于樣式的類名不確定,需要?jiǎng)討B(tài)指定 ? ?2.數(shù)組寫法:適用于要綁定的個(gè)數(shù)個(gè)名字都不確定,數(shù)組中的樣式連同class里面有的樣式都會(huì)綁定到div中 ? ?3. 對(duì)象寫

    2024年02月15日
    瀏覽(23)
  • Vue-16、Vue列表渲染(v-for的使用)

    Vue-16、Vue列表渲染(v-for的使用)

    1、vue遍歷數(shù)組 也可以這樣寫 2、遍歷對(duì)象

    2024年01月21日
    瀏覽(35)
  • vue3【列表渲染】v-for 詳細(xì)介紹(vue中的“循環(huán)”)

    vue3【列表渲染】v-for 詳細(xì)介紹(vue中的“循環(huán)”)

    在本文之前已經(jīng)有文章簡單概要介紹過vue中的渲染,點(diǎn)擊幫你快速復(fù)習(xí)????,包括 條件渲染 和 列表渲染 。 二者同樣重要,但是 對(duì)于項(xiàng)目而言,使用更多的是列表渲染,主要表現(xiàn)為“循環(huán)”。 下面讓我們繼續(xù)深入地了解列表渲染的相關(guān)內(nèi)容吧~?????? 我們可以使用 v-f

    2024年02月22日
    瀏覽(25)
  • R語言學(xué)習(xí)筆記--列表list、數(shù)據(jù)框

    1-列表 列表 可以包含不同類型的 對(duì)象 ,也就是說,列表不是將某些具體的值組織起來,而是組織R對(duì)象。列表將數(shù)據(jù)組織在一個(gè)一維集合中。 列表非常好用,因?yàn)樗梢匝b任何類型的對(duì)象,不要求數(shù)據(jù)之間是同質(zhì)的。 創(chuàng)建列表 list() ?以上代碼,創(chuàng)建了一個(gè)列表,其中第一個(gè)

    2024年02月15日
    瀏覽(90)
  • 學(xué)習(xí)筆記Day3:數(shù)據(jù)框、矩陣和列表

    學(xué)習(xí)筆記Day3:數(shù)據(jù)框、矩陣和列表

    要經(jīng)常檢查代碼生成的結(jié)果,警惕不報(bào)錯(cuò)的錯(cuò)誤 向量:一維 表格:二維 列表:三維 判斷數(shù)據(jù)結(jié)構(gòu):class()或is族函數(shù)判斷,或根據(jù)其生成的函數(shù)來判斷 二維,每列只允許一種數(shù)據(jù)類型 數(shù)據(jù)框來源 用代碼新建 由已有數(shù)據(jù)轉(zhuǎn)換或處理得到 讀取表格文件 R語言內(nèi)置數(shù)據(jù)(iris,

    2024年03月11日
    瀏覽(17)
  • Vue列表渲染(v-for)以及key的作用與原理

    Vue列表渲染(v-for)以及key的作用與原理

    索引值的兩種寫法:? ? ? 代碼: v-for=\\\"p in persons\\\"??:key=\\\"p.id\\\" ? ? ? ? persons : 指的是data中定義的那些數(shù)據(jù),數(shù)據(jù)池。 ? ? ? ? p ?:是一個(gè)形參,接收persons中的每一個(gè)數(shù)據(jù)。 ? ? ? ? :key=\\\"p.id\\\" :動(dòng)態(tài)綁定數(shù)據(jù),讓每一個(gè)li都有唯一的標(biāo)識(shí)(每一個(gè)節(jié)點(diǎn)的標(biāo)識(shí))。 ? ?遍歷

    2024年02月16日
    瀏覽(35)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包