vue3에서 작성하는 프로젝트에서는 pinia 공개 데이터 소스를 사용하는 것 외에 어떤 더 간단한 API 방법을 사용할 수 있나요? 다음으로 부모-자식 구성 요소와 자식-부모 구성 요소 간에 통신하는 여러 가지 방법을 소개하겠습니다.
1. 부모-자식 컴포넌트 통신
1.1 DefineProps
부모-자식 컴포넌트와 통신할 때 가장 먼저 생각하는 것은 props입니다. 자식 컴포넌트에서 허용되는 props를 선언하고 전달합니다. 상위 컴포넌트의 해당 props에서 키와 값, 을 사용하면 하위 컴포넌트의 상위 컴포넌트에서 전달된 속성과 값을 받을 수 있습니다. [관련 권장 사항: vuejs 비디오 튜토리얼, web front-end development]
구체적인 구현은 다음과 같습니다.
// children.vue <template> <ul class="list-group"> <li class="list-group-item" v-for="item in list" :key="index"> {{item}} </li> </ul> </template> <script setup> import { defineProps } from 'vue'; const props = defineProps({ list :{ type: Array, default: () => {} } }) </script>
// parent.vue <template> <div class="parent-wrap"> <input type="text" v-model="value" class="form-control" placeholder="请输入"> <div class="input-group-append"> <button class="btn btn-primary" @click="handleAdd">添加</button> </div> </div> <!-- child --> <childrenVue :list="list"></childrenVue> </template> <script setup> import { ref } from 'vue'; import childrenVue from './children.vue'; const value = ref('') const list = ref(['javaScript', 'Html', 'CSS']) const handleAdd = () =>{ list.value.push(value.value) value = '' } </script>
위 그림과 같이 목록 배열이 상위 구성 요소는 하위 구성 요소에 표시되며 목록에 데이터를 추가하여 하위 구성 요소 데이터를 업데이트할 수도 있습니다.
1.2 Provide/inject
prop에 대한 이야기를 마치고 두 번째로 소개하고 싶은 것은 vue3의 결합 옵션인 Provide와 Inject입니다.
project는 하위 구성 요소에서 주입할 수 있는 값을 제공하는 데 사용되는 반면, inject는 일치할 속성을 선언하고 상위 공급자의 일치를 통해 현재 구성 요소에 주입하는 데 사용됩니다. 코드는 다음과 같이 구현됩니다.
// children.vue <template> <ul class="list-group"> <li class="list-group-item" v-for="item in list" :key="item">{{item}}</li> </ul> </template> <script setup> import { inject } from 'vue'; const list = inject('list') </script>
// parent.vue <template> <div class="parent-wrap"> <input type="text" v-model="value" class="form-control" placeholder="请输入"> <div class="input-group-append"> <button class="btn btn-primary" @click="handleAdd">添加</button> </div> </div> <!-- child --> <childVue /> </template> <script setup> import childVue from "./child.vue"; const { ref, provide, readonly } = require("vue"); const value = ref('') const list = ref(['javaScript', 'HTML', 'CSS']) provide('list', readonly(list.value)) const handleAdd = () => { list.value.push(value.value) } </script>
위 그림과 같이 provide
API를 사용하여 list
키와 값을 제공합니다. list .value
를 선택하고 list, value
를 읽기 전용 속성으로 설정하여 하위 구성 요소가 상위 구성 요소의 데이터 소스를 수정하지 못하도록 합니다. 그런 다음 inject
API가 list
를 수신하고 상위 구성요소와 하위 구성요소 간의 통신을 실현했습니다. provide
API向外提供了一个 key 为 list
,值为list.value
,同时将 list,value
设置成了只读属性,防止子组件修改父组件的数据源。然后我们 inject
API接收了 list
,实现了父子组件的通信。
2.子父组件通信
2.1 defineEmits
上面我介绍了两种父向子传值的方法,但在我们开发中,我们还会遇到子向父组件传值的情况,那我们该怎么解决呢? 第一个方法就是vue3中的 defineEmits
API,代码实现如下:
// children.vue <template> <div class="parent-wrap"> <input type="text" v-model="value" class="form-control" placeholder="请输入" /> <div class="input-group-append"> <button class="btn btn-primary" @click="handleAdd">添加</button> </div> </div> </template> <script setup> const { ref, defineEmits } = require("vue"); const value = ref('') const emits = defineEmits(['add']) //父传子 // 给父组件传一个函数 const handleAdd = () => { emits('add', value.value) value.value= '' } </script>
// parent.vue <template> <childVue @add='handleAdd'/> <ul class="list-group"> <li class="list-group-item" v-for="item in list" :key="item">{{item}}</li> </ul> </template> <script setup> import { ref } from '@vue/reactivity'; import childVue from './child.vue'; const list = ref(['javaScript', 'HTML', 'CSS']) const handleAdd = (val) => { list.value.push(val) } </script>
如上图所示,我们在子组件上emit
一个出了一个 add事件给父组件接收,同时在父组件上调用来执行添加的逻辑,再将 input
的value
变为空,实现了父组件向子组件传参。
2.2 v-model:xxx + emit
在介绍完 defineEmits
后, 我们再来介绍一种与其有异曲同工之处的v-model:xxx + emit
的方法,实现如下:
// children.vue <template> <div class="parent-wrap"> <input type="text" v-model="value" class="form-control" placeholder="请输入" /> <div class="input-group-append"> <button class="btn btn-primary" @click="handleAdd">添加</button> </div> </div> </template> <script setup> const { ref, defineProps, defineEmits } = require("vue"); const value = ref('') const props = defineProps({ list: { type: Array, default: () => [] } }) const emits = defineEmits(['list']) // 给父组件一点东西 const handleAdd = () => { // props.list.push(value.value) //不建议直接修改props的值 把握不住数据源的流转 const arr = props.list arr.push(value.value) emits('list', arr) value.value= '' } </script>
<template> <childVue v-model:list="list" @list ='add'/> <ul class="list-group"> <li class="list-group-item" v-for="item in list" :key="item">{{item}}</li> </ul> </template> <script setup> import { ref } from '@vue/reactivity'; import childVue from './child.vue'; const list = ref(['javaScript', 'HTML', 'CSS']) const add =(val) => { console.log(val); console.log(list); } </script>
再和上面的defineEmits
方法比较完以后,相信大家也看出了这两者的异曲同工在哪了。我们这里是先将父组件的list
传给了子组件,再在子组件修改了父组件的数据源,同时再emit
2. 자식-부모 구성 요소 통신2.1 DefineEmits
부모에서 자식으로 값을 전달하는 두 가지 방법을 도입했습니다. 하지만 개발 과정에서 자식이 부모 컴포넌트에 값을 전달하는 상황도 발생하게 되는데 어떻게 해결해야 할까요? 첫 번째 방법은 vue3의 defineEmits
API입니다. 코드 구현은 다음과 같습니다: rrreeerrreee
emit
전송하여 수신합니다. it 을 호출하고 동시에 상위 구성요소에서 호출하여 추가된 로직을 실행한 다음 input
의 값
을 공백으로 변경하여 상위 구성요소 전달을 실현합니다. 하위 구성요소에 대한 매개변수입니다. 🎜2.2 v-model:xxx +emit🎜🎜defineEmits
를 소개한 후, 이와 유사한 를 소개하겠습니다. v-의 방법 model:xxx + Emit
은 다음과 같이 구현됩니다: 🎜rrreeerrreee🎜
🎜🎜위의 defineEmits
메소드와 비교해보면 모두가 둘 사이의 유사점을 알 수 있을 것이라고 믿습니다. 여기서는 먼저 상위 구성 요소의 목록
을 하위 구성 요소에 전달한 다음 하위 구성 요소에서 상위 구성 요소의 데이터 소스를 수정하고 동시에 emit
반환을 반환합니다. 이를 달성하기 위해 상위 구성요소에 하위 구성요소는 값을 상위 구성요소에 전달합니다. 🎜🎜 (학습 영상 공유: 🎜vuejs 입문 튜토리얼🎜, 🎜기본 프로그래밍 영상🎜)🎜
위 내용은 vue3 구성 요소 간에 통신하는 방법은 무엇입니까? 의사소통 방법에 대한 간략한 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

NetflixusesAcustomFrameworkCalled "Gibbon"BuiltonReact, NotreactorVuedirectly.1) TeamExperience : 2) ProjectComplexity : vueforsimplerProjects, 3) CustomizationNeeds : reactoffersmoreflex.4)

Netflix는 주로 프레임 워크 선택의 성능, 확장 성, 개발 효율성, 생태계, 기술 부채 및 유지 보수 비용을 고려합니다. 1. 성능 및 확장 성 : Java 및 SpringBoot는 대규모 데이터 및 높은 동시 요청을 효율적으로 처리하기 위해 선택됩니다. 2. 개발 효율성 및 생태계 : React를 사용하여 프론트 엔드 개발 효율성을 향상시키고 풍부한 생태계를 활용하십시오. 3. 기술 부채 및 유지 보수 비용 : Node.js를 선택하여 유지 보수 비용과 기술 부채를 줄이기 위해 마이크로 서비스를 구축하십시오.

Netflix는 주로 VUE가 특정 기능을 위해 보충하는 프론트 엔드 프레임 워크로 React를 사용합니다. 1) React의 구성 요소화 및 가상 DOM은 Netflix 애플리케이션의 성능 및 개발 효율을 향상시킵니다. 2) VUE는 Netflix의 내부 도구 및 소규모 프로젝트에 사용되며 유연성과 사용 편의성이 핵심입니다.

vue.js는 복잡한 사용자 인터페이스를 구축하는 데 적합한 점진적인 JavaScript 프레임 워크입니다. 1) 핵심 개념에는 반응 형 데이터, 구성 요소화 및 가상 DOM이 포함됩니다. 2) 실제 응용 분야에서는 TODO 응용 프로그램을 구축하고 Vuerouter를 통합하여 시연 할 수 있습니다. 3) 디버깅 할 때 VuedeVtools 및 Console.log를 사용하는 것이 좋습니다. 4) 성능 최적화는 V-IF/V- 쇼, 목록 렌더링 최적화, 구성 요소의 비동기로드 등을 통해 달성 할 수 있습니다.

vue.js는 중소형 프로젝트에 적합하지만 REACT는 크고 복잡한 응용 프로그램에 더 적합합니다. 1. Vue.js의 응답 형 시스템은 종속성 추적을 통해 DOM을 자동으로 업데이트하여 데이터 변경을 쉽게 관리 할 수 있습니다. 2. 반응은 단방향 데이터 흐름을 채택하고 데이터 흐름에서 하위 구성 요소로 데이터가 흐르고 명확한 데이터 흐름과 곤란하기 쉬운 구조를 제공합니다.

vue.js는 중소형 프로젝트 및 빠른 반복에 적합한 반면 React는 크고 복잡한 응용 프로그램에 적합합니다. 1) vue.js는 사용하기 쉽고 팀이 불충분하거나 프로젝트 규모가 작는 상황에 적합합니다. 2) React는 더 풍부한 생태계를 가지고 있으며 고성능 및 복잡한 기능적 요구가있는 프로젝트에 적합합니다.

VUE에서 태그의 점프를 구현하는 방법에는 다음이 포함됩니다. HTML 템플릿의 A 태그를 사용하여 HREF 속성을 지정합니다. VUE 라우팅의 라우터 링크 구성 요소를 사용하십시오. javaScript 에서이. $ router.push () 메소드를 사용하십시오. 매개 변수는 쿼리 매개 변수를 통해 전달 될 수 있으며 동적 점프를 위해 라우터 옵션에서 경로가 구성됩니다.

VUE에서 구성 요소 점프를 구현하는 방법은 다음과 같습니다. 라우터 링크 및 & lt; router-view & gt; 하이퍼 링크 점프를 수행하고 대상 경로로 속성을 지정합니다. & lt; router-view & gt; 현재 라우팅 된 렌더링 된 구성 요소를 표시하는 구성 요소. 프로그래밍 방식 탐색을 위해 router.push () 및 router.replace () 메소드를 사용하십시오. 전자는 역사를 구하고 후자는 기록을 떠나지 않고 현재 경로를 대체합니다.


핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

안전한 시험 브라우저
안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경
