>  기사  >  웹 프론트엔드  >  vue3에서 setup, ref 및 반응성을 사용하는 방법

vue3에서 setup, ref 및 반응성을 사용하는 방법

WBOY
WBOY앞으로
2023-05-16 19:22:041887검색

1. setUp 사용에 대한 첫 번째 소개

다음 코드 함수에 대한 간략한 소개:
ref 함수를 사용하여 특정 변수의 변경 사항을 모니터링하고 이를 뷰에 렌더링합니다.
setUp 함수는 조합 API의 진입 함수입니다. 이건 매우 중요합니다.
setUp은 변수의 변화를 모니터링할 수 있습니다! 우리는 그것을 활용할 것입니다.
ref는 vue에 내장되어 있으므로 가져와야 합니다.

<template>
 <div>{{ countNum}}</div>
 <button @click="handerFunc">按钮</button>
</template>
<script>
import {ref} from 'vue'
export default {
  name: 'App',
  setup() {
    // 这一句表示的是定义了一个变量count。这个变量的初始值是100
    let countNum=ref(100);

    // 在组合API中,如果想定义一个方法,不用定义到methods中去。直接定义就可以了
    function handerFunc(){
      // console.log(countNum);//countNum是一个对象
      countNum.value += 10;
    }
    //在组合api中定义的方法,或者变量。如果外界需要使用,那么必须通过 return  {aaa,func} 的方式暴露出去
    return { countNum ,handerFunc}
  }
}
</script>

2 반응형 사용 이해

ref 함수는 단순한 유형의 데이터 변경만 모니터링할 수 있습니다.
복합 유형(배열, 객체)의 변경 사항을 모니터링할 수 없습니다.
그래서 우리의 주인공 반응이 등장합니다.
설정의 기능은 자동으로 한 번 실행됩니다.

<template>
 <div>
   <ul>
     <li v-for="item in satte.arr" :key="item.id">
       {{item.name  }}
     </li>
   </ul>

 </div>
</template>
<script>
import {reactive} from 'vue'
export default {
  name: 'App',
  setup(){
    console.log("setUp会自动执行的")
    // ref函数的注意点:
    // ref函数只能够去监听简单类型的数据变化,不能够去监听,复杂类型的变化(数组、对象)
    // reactive  方法里面是一个对象
    let satte=reactive({
       arr:[
         {name:"司藤",id:'0011'},
         {name:"皮囊之下",id:'0011'},
         {name:"百岁之约",id:'0012'},
         {name:"三生三世",id:'0013'},
       ]
    })
    return { satte }
  },
}
</script>

3 반응형

을 사용하여 뷰 삭제를 실현

<template>
 <div>
   <ul>
     <li v-for="(item,index) in satte.arr" :key="index" @click="del(index)">
       {{item.name  }}
     </li>
   </ul>

 </div>
</template>
<script>
import {reactive} from 'vue'
export default {
  name: 'App',
  setup(){
    let satte=reactive({
       arr:[
         {name:"司藤",id:'0011'},
         {name:"皮囊之下",id:'0011'},
         {name:"百岁之约",id:'0012'},
         {name:"三生三世",id:'0013'},
       ]
    })
    // 删除被点击的元素
    function del(index){
      for(let i=0;i<satte.arr.length;i++){
        if(index==i){
          satte.arr.splice(i,1)
        }
      }
    }
    return { satte, del}
  },
}
</script>

4 삭제 로직을 분리

하여 별도의 모듈을 구성합니다

<template>
 <div>
   <ul>
     <li v-for="(item,index) in satte.arr" :key="index" @click="del(index)">
       {{item.name  }}
     </li>
   </ul>

 </div>
</template>
<script>
import {reactive} from 'vue'
export default {
  name: 'App',
  setup(){
    // onlyDelLuoJi() 方法中含有一个数组 和一个方法;类似于解构
    let {satte,del }=onlyDelLuoJi();
    
    // 暴露给外界使用
    return { satte,del}
  },
}

function onlyDelLuoJi(){
   let satte=reactive({
       arr:[
         {name:"司藤",id:'0011'},
         {name:"皮囊之下",id:'0011'},
         {name:"百岁之约",id:'0012'},
         {name:"三生三世",id:'0013'},
       ]
    })
    // 删除被点击的元素
    function del(index){
      for(let i=0;i<satte.arr.length;i++){
        if(index==i){
          satte.arr.splice(i,1)
        }
      }
    }
    // 将数据satte 和方法 del 暴露出去
    return { satte,del }
}
</script>

5 추가된 기능을 구현합니다

이벤트 간 매개변수 전달

<template>
 <div>
   <div>
      <input type="text" v-model="addobj.watchTv.name">
      <button @click="addHander">添加</button>
   </div>
   
   <ul>
     <li v-for="(item,index) in satte.arr" :key="index" @click="del(index)">
       {{item.name  }}
     </li>
   </ul>

 </div>
</template>
<script>
import {reactive} from 'vue'
export default {
  name: 'App',
  setup(){
    // onlyDelLuoJi() 方法中含有一个数组 和一个方法;类似于解构
    let {satte,del }=onlyDelLuoJi();
    
    // 传递参数satte 是onlyDelLuoJi函数中提供的satte。进行传递
    let {  addobj,addHander  }=OnlyaddHander(satte);

    // 暴露给外界使用
    return { satte,del,addobj, addHander}
  },
}

//添加功能模块
function OnlyaddHander(satte){
  console.log('初始化添加',satte)
    let addobj=reactive({
        watchTv:{
          name:"",
          id:""
        }
     });

    function addHander(){
      // 重置清空 错吴做法
        // satte.arr.push(addobj.watchTv)
        // addobj.watchTv.name = ""; 
        // addobj.watchTv.id = "";
        

          // 正确做法
        let oldobj = Object.assign({}, addobj.watchTv)
        satte.arr.push(oldobj)
    }
    return { addobj,addHander }
}

//删除功能模块
function onlyDelLuoJi(){
  console.log('删除初始化')
   let satte=reactive({
       arr:[
         {name:"司藤",id:'0011'},
         {name:"皮囊之下",id:'0011'},
         {name:"百岁之约",id:'0012'},
         {name:"三生三世",id:'0013'},
       ]
    })
    // 删除被点击的元素
    function del(index){
      for(let i=0;i<satte.arr.length;i++){
        if(index==i){
          satte.arr.splice(i,1)
        }
      }
    }
    // 将数据satte 和方法 del 暴露出去
    return { satte,del }
}
</script>

6 넣습니다. 별도의 파일로 추출

추가, 삭제에 관련된 로직을 별도의 파일로 분리하고 싶습니다.
add.js는 추가 관련 로직
del.js는 삭제 관련 로직

import { reactive } from "vue"
function OnlyaddHander(satte){
  console.log('初始化添加',satte)
    let addobj=reactive({
        watchTv:{
          name:"",
          id:""
        }
     });
    function addHander(e){
        // 重置清空 错吴做法
        // satte.arr.push(addobj.watchTv)
        // addobj.watchTv.name = ""; 
        // addobj.watchTv.id = "";
        // 正确做法
        let oldobj = Object.assign({}, addobj.watchTv)
        satte.arr.push(oldobj)
        e.preventDefault();
    }
    return { addobj,addHander }
}
export default  OnlyaddHander

adel.js

import {reactive } from "vue"
function onlyDelLuoJi() {
  console.log('删除初始化')
   let satte=reactive({
       arr:[
         {name:"司藤",id:'0011'},
         {name:"皮囊之下",id:'0011'},
         {name:"百岁之约",id:'0012'},
         {name:"三生三世",id:'0013'},
       ]
    })
    // 删除被点击的元素
    function del(index){
      for(let i=0;i<satte.arr.length;i++){
        if(index==i){
          satte.arr.splice(i,1)
        }
      }
    }
    // 将数据satte 和方法 del 暴露出去
    return { satte,del }
}
export default  onlyDelLuoJi

메인 파일

<template>
 <div>
   <div>
      <input type="text" v-model="addobj.watchTv.name">
      <button @click="addHander">添加</button>
   </div>
   
   <ul>
     <li v-for="(item,index) in satte.arr" :key="index" @click="del(index)">
       {{item.name  }}
     </li>
   </ul>

 </div>
</template>
<script>
import onlyDelLuoJi from "./components/del"
import OnlyaddHander from "./components/add"
export default {
  name: 'App',
  setup(){
    // onlyDelLuoJi() 方法中含有一个数组 和一个方法;类似于解构
    let {satte,del }=onlyDelLuoJi();
    
    // 传递参数
    let {  addobj,addHander  }=OnlyaddHander(satte);

    // 暴露给外界使用
    return { satte,del,addobj, addHander}
  },
}
</script>

위 내용은 vue3에서 setup, ref 및 반응성을 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제