찾다
웹 프론트엔드View.jsvue3의 watch 및 watchEffect 사용 사례 분석

vue3의 watch 및 watchEffect 사용 사례 분석

May 12, 2023 pm 09:43 PM
vue3watchwatcheffect

    watch

    watch는 단일 데이터를 모니터링합니다.

    <template>
        <input type="text" v-model="text1" />
    </template>
    
    <script setup>
    import { ref, watch } from &#39;vue&#39;
    const text1 = ref(&#39;&#39;)
    
    watch(text1, (newVal, oldVal) => {
        console.log(&#39;监听单个数据&#39;, newVal, oldVal)
    })
    </script>

    watch는 여러 데이터를 모니터링합니다.

    <template>
        <input type="text" v-model="text1" />
        <input type="text" v-model="text2" />
    </template>
    
    <script setup>
    import { ref, watch } from &#39;vue&#39;
    const text1 = ref(&#39;&#39;)
    const text2 = ref(&#39;&#39;)
    
    watch([text1, text2], (newVal, oldVal) => {
        console.log(&#39;监听一组数据&#39;, newVal, oldVal)
    })
    </script>

    watch 모니터 객체

    <template>
        name: <input type="text" v-model="student.name" />
        age: <input type="number" v-model="student.age" />
    </template>
    <script setup>
    import { reactive, watch } from &#39;vue&#39;
    const student = reactive({
        name: &#39;&#39;,
        age: &#39;&#39;
    })
    watch(student, (newVal, oldVal) => {
        console.log(&#39;newVal&#39;, newVal)
        console.log(&#39;oldVal&#39;, newVal)
    })
    </script>

    watch에는 세 번째 매개변수인 deep도 있습니다. > 및 immediate를 추가하면 효과를 볼 수 있습니다watch还有第三个参数,deepimmediate,可以加上看看效果

    watch监听对象的某一个值

    <template>
        name: <input type="text" v-model="student.name" />
        age: <input type="number" v-model="student.age" />
    </template>
    <script lang="ts" setup>
    import { reactive, watch } from &#39;vue&#39;
    const student = reactive({
        name: &#39;&#39;,
        age: &#39;&#39;
    })
    watch(() => student.name, (newVal, oldVal) => {
        console.log(&#39;newVal&#39;, newVal)
        console.log(&#39;oldVal&#39;, newVal)
    }, {
        deep: true,
        immediate: true
    })
    </script>

    监听对象某一个属性的时候需要用箭头函数 

    watchEffect

    关于watchEffect,官网是这么介绍的:为了根据响应式状态自动应用和重新应用副作用,我们可以使用watchEffect方法,它立即执行传入的一个函数,同时响应式追踪其依赖,并在其依赖变更时重新运行该函数。 也就是说,我们并不需要传入一个特定的依赖源,而且它会立即执行一遍回调函数,如果函数产生了副作用,那它就会自动追踪副作用的依赖关系,自动分析出响应源。光看概念可能比较模糊,先来看个最简单的例子:

    <template>
        name: <input type="text" v-model="student.name" />
        age: <input type="number" v-model="student.age" />
    </template>
    
    <script lang="ts" setup>
    import { reactive, watchEffect } from &#39;vue&#39;
    
    const student = reactive({
        name: &#39;&#39;,
        age: &#39;&#39;
    })
    watchEffect(() => {
        console.log(&#39;name: &#39;,student.name, &#39;age: &#39;, student.age)
    })
    </script>

    watchEffect副作用

    副作用,那什么是副作用呢,其实很简单,就是在监听之前,我得做一件事。

    <template>
        name: <input type="text" v-model="student.name" />
        age: <input type="number" v-model="student.age" />
    
        <h3 id="student-name">{{student.name}}</h3>
    </template>
    
    <script lang="ts" setup>
    import { reactive, watchEffect } from &#39;vue&#39;
    
    const student = reactive({
        name: &#39;&#39;,
        age: &#39;&#39;
    })
    watchEffect((oninvalidate) => {
        oninvalidate(() => {
            student.name = &#39;张三&#39;
        })
        console.log(&#39;name: &#39;, student.name)
    }, {
        // pre 组件更新前; sync:强制效果始终同步; post:组件更新后执行
        flush: &#39;post&#39;  // dom加载完毕后执行
    })
    </script>

    监听之前让student.name赋值为'张三',无论你输入什么值,name一直都是'张三'

    停止监听

    我们用同步语句创建的监听器,会自动绑定到组件实例上,并且会在组件卸载时自动停止,但是,如果我们在异步回调里创建一个监听器,那它就不会绑定到当前组件上,必须手动去停止,防止内存泄漏。 那怎么去停止呢,其实我们只需要调用一下watchwatchEffect返回的函数

    const stop = watchEffect(() => {})
    
    // 停止监听
    unwatch()

    区别

    用了一遍watchwatchEffect之后,发现他俩主要有以下几点区别:

    • watch是惰性执行的,而watchEffect不是,不考虑watch第三个配置参数的情况下,watch在组件第一次执行的时候是不会执行的,只有在之后依赖项变化的时候再执行,而watchEffect是在程序执行到此处的时候就会立即执行,而后再响应其依赖变化执行。

    • watch需要传递监听的对象,watchEffect

      watch는 개체의 특정 값을 모니터링합니다
    • rrreee
    개체의 특정 속성을 모니터링할 때는 화살표를 사용해야 합니다. 함수 🎜🎜 watchEffect🎜🎜 watchEffect에 대해 공식 홈페이지에서는 다음과 같이 소개하고 있습니다. 반응 상태에 따라 사이드 이펙트를 자동으로 적용하고 다시 적용하려면 watchEffect 메서드는 종속성을 반응적으로 추적하고 종속성이 변경되면 함수를 다시 실행하는 수신 A 함수를 즉시 실행합니다. 즉, 특정 종속성 소스를 전달할 필요가 없으며 함수가 부작용을 생성하면 자동으로 부작용의 종속성을 추적하고 응답 소스를 자동으로 분석하여 콜백 함수를 실행합니다. 보기만 해도 개념이 모호할 수 있는데 가장 간단한 예부터 살펴보겠습니다. 🎜rrreee🎜watchEffect Side Effect🎜🎜Side Effect란 과연 무엇일까요? 한 가지 일을 해야 합니다. 🎜rrreee🎜모니터링하기 전에 student.name을 'Zhang San'에 할당하세요. 어떤 값을 입력하든 name은 항상 'Zhang San'이 됩니다.🎜🎜모니터링 중지🎜🎜 동기 문을 사용하여 생성한 리스너는 구성 요소 인스턴스에 자동으로 바인딩되고 구성 요소가 언로드될 때 자동으로 중지됩니다. 그러나 비동기 콜백에서 리스너를 생성하면 현재 구성 요소에 바인딩되지 않습니다. 메모리 누수를 방지하려면 수동으로 중지해야 합니다. 그렇다면 이를 중지하려면 어떻게 해야 할까요? 실제로 watch 또는 watchEffect🎜rrreee🎜에서 반환된 함수만 호출하면 됩니다. 차이점🎜🎜은 watch를 사용합니다. > watchEffect 이후에는 다음과 같은 주요 차이점이 있음을 발견했습니다. 🎜
    • 🎜watch가 느리게 실행됩니다. 그러나 watchEffect는 그렇지 않습니다. watch의 세 번째 구성 매개변수를 고려하지 않으면 구성 요소가 처음 실행될 때 watch가 실행되지 않습니다. . , 나중에 종속성이 변경될 때만 실행되는 반면 watchEffect는 여기에서 프로그램이 실행될 때 즉시 실행된 다음 종속성 변경에 대한 응답으로 실행됩니다. 🎜🎜
    • 🎜watch는 모니터링 개체를 전달해야 하지만, watchEffect는 🎜🎜🎜 필요하지 않습니다.

    위 내용은 vue3의 watch 및 watchEffect 사용 사례 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명
    이 기사는 亿速云에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제
    vue.js 및 프론트 엔드 스택 : 연결 이해vue.js 및 프론트 엔드 스택 : 연결 이해Apr 24, 2025 am 12:19 AM

    Vue.js는 개발 효율성과 사용자 경험을 향상시키기 위해 프론트 엔드 기술 스택과 밀접하게 통합되어 있습니다. 1) 건설 도구 : 모듈 식 개발을 달성하기 위해 웹 팩 및 롤업과 통합. 2) 주 관리 : Vuex와 통합하여 복잡한 응용 프로그램 상태를 관리합니다. 3) 라우팅 : vuerouter와 통합하여 단일 페이지 응용 프로그램 라우팅을 실현합니다. 4) CSS 전 처리기 : 스타일 개발 효율성을 향상시키기 위해 SASS를 지원하고 덜 지원합니다.

    Netflix : React (또는 기타 프레임 워크)의 사용 탐색Netflix : React (또는 기타 프레임 워크)의 사용 탐색Apr 23, 2025 am 12:02 AM

    Netflix는 React의 구성 요소 설계 및 가상 DOM 메커니즘이 복잡한 인터페이스와 빈번한 업데이트를 효율적으로 처리 할 수 ​​있기 때문에 REACT를 선택했습니다. 1) 구성 요소 기반 설계를 통해 Netflix는 인터페이스를 관리 가능한 위젯으로 분류하여 개발 효율성 및 코드 유지 관리를 향상시킬 수 있습니다. 2) 가상 DOM 메커니즘은 DOM 운영을 최소화하여 Netflix 사용자 인터페이스의 부드러움과 고성능을 보장합니다.

    vue.js and the frontend : 프레임 워크에 대한 깊은 다이빙vue.js and the frontend : 프레임 워크에 대한 깊은 다이빙Apr 22, 2025 am 12:04 AM

    Vue.js는 사용하기 쉽고 강력하기 때문에 개발자에게 사랑을받습니다. 1) 반응 형 데이터 바인딩 시스템은 뷰를 자동으로 업데이트합니다. 2) 구성 요소 시스템은 코드의 재사용 성과 유지 관리를 향상시킵니다. 3) 컴퓨팅 속성 및 청취자는 코드의 가독성과 성능을 향상시킵니다. 4) vuedevtools를 사용하고 콘솔 오류를 확인하는 것이 일반적인 디버깅 기술입니다. 5) 성능 최적화에는 주요 속성, 계산 된 속성 및 유지 구성 요소 사용이 포함됩니다. 6) 모범 사례에는 명확한 구성 요소 이름 지정, 단일 파일 구성 요소 사용 및 수명주기 후크의 합리적인 사용이 포함됩니다.

    프론트 엔드의 vue.js의 힘 : 주요 기능 및 이점프론트 엔드의 vue.js의 힘 : 주요 기능 및 이점Apr 21, 2025 am 12:07 AM

    vue.js는 효율적이고 유지 관리 가능한 프론트 엔드 애플리케이션을 구축하는 데 적합한 점진적인 JavaScript 프레임 워크입니다. 주요 기능은 다음과 같습니다. 1. 응답 데이터 바인딩, 2. 구성 요소 개발, 3. 가상 Dom. 이러한 기능을 통해 vue.js는 개발 프로세스를 단순화하고 응용 프로그램 성능과 유지 관리를 향상시켜 현대 웹 개발에서 매우 인기가 있습니다.

    vue.js가 React보다 낫습니까?vue.js가 React보다 낫습니까?Apr 20, 2025 am 12:05 AM

    vue.js와 반응은 각각 고유 한 장점과 단점이 있으며, 선택은 프로젝트 요구 사항 및 팀 조건에 따라 다릅니다. 1) vue.js는 단순하고 사용하기 쉬운 소규모 프로젝트 및 초보자에게 적합합니다. 2) REACT는 풍부한 생태계와 구성 요소 설계로 인해 대규모 프로젝트 및 복잡한 UI에 적합합니다.

    vue.js의 기능 : 프론트 엔드에서 사용자 경험 향상vue.js의 기능 : 프론트 엔드에서 사용자 경험 향상Apr 19, 2025 am 12:13 AM

    vue.js는 여러 기능을 통해 사용자 경험을 향상시킵니다. 1. 응답 시스템은 실시간 데이터 피드백을 실현합니다. 2. 구성 요소 개발은 코드 재사용 성을 향상시킵니다. 3. Vuerouter는 원활한 내비게이션을 제공합니다. 4. 동적 데이터 바인딩 및 전환 애니메이션은 상호 작용 효과를 향상시킵니다. 5. 오류 처리 메커니즘은 사용자 피드백을 보장합니다. 6. 성능 최적화 및 모범 사례는 응용 프로그램 성능을 향상시킵니다.

    vue.js : 웹 개발에서 역할을 정의합니다vue.js : 웹 개발에서 역할을 정의합니다Apr 18, 2025 am 12:07 AM

    웹 개발에서 vue.js의 역할은 개발 프로세스를 단순화하고 효율성을 향상시키는 점진적인 JavaScript 프레임 워크 역할을하는 것입니다. 1) 개발자는 반응 형 데이터 바인딩 및 구성 요소 개발을 통해 비즈니스 로직에 집중할 수 있습니다. 2) vue.js의 작동 원리는 반응 형 시스템 및 가상 DOM에 의존하여 성능을 최적화합니다. 3) 실제 프로젝트에서는 Vuex를 사용하여 글로벌 상태를 관리하고 데이터 대응 성을 최적화하는 것이 일반적입니다.

    vue.js 이해 : 주로 프론트 엔드 프레임 워크vue.js 이해 : 주로 프론트 엔드 프레임 워크Apr 17, 2025 am 12:20 AM

    vue.js는 2014 년 Yuxi가 출시하여 사용자 인터페이스를 구축하기 위해 진보적 인 JavaScript 프레임 워크입니다. 핵심 장점은 다음과 같습니다. 1. 응답 데이터 바인딩, 데이터 변경의 자동 업데이트보기; 2. 구성 요소 개발, UI는 독립적이고 재사용 가능한 구성 요소로 분할 될 수 있습니다.

    See all articles

    핫 AI 도구

    Undresser.AI Undress

    Undresser.AI Undress

    사실적인 누드 사진을 만들기 위한 AI 기반 앱

    AI Clothes Remover

    AI Clothes Remover

    사진에서 옷을 제거하는 온라인 AI 도구입니다.

    Undress AI Tool

    Undress AI Tool

    무료로 이미지를 벗다

    Clothoff.io

    Clothoff.io

    AI 옷 제거제

    Video Face Swap

    Video Face Swap

    완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

    뜨거운 도구

    SublimeText3 중국어 버전

    SublimeText3 중국어 버전

    중국어 버전, 사용하기 매우 쉽습니다.

    SublimeText3 영어 버전

    SublimeText3 영어 버전

    권장 사항: Win 버전, 코드 프롬프트 지원!

    SublimeText3 Linux 새 버전

    SublimeText3 Linux 새 버전

    SublimeText3 Linux 최신 버전

    WebStorm Mac 버전

    WebStorm Mac 버전

    유용한 JavaScript 개발 도구

    mPDF

    mPDF

    mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.