Vue구성요소 간 통신 방법은 무엇인가요? 다음 글에서는 Vue 컴포넌트의 통신 방법을 소개하겠습니다. 도움이 되셨으면 좋겠습니다!
vue의 두 가지 주요 기능은 반응형 프로그래밍과 구성 요소화입니다. Component는 Vue의 핵심 기능이지만 각 구성 요소 인스턴스의 범위는 서로 독립적이므로 서로 다른 구성 요소 간의 데이터가 서로 직접 참조할 수 없습니다. 컴포넌트 간에 데이터를 참조하려면 컴포넌트 통신을 사용해야 합니다. 통신하기 전에 먼저 컴포넌트 간의 관계를 이해해야 합니다.
위 그림과 같이:
아버지-자식 관계: A와 B, A와 C, B와 D, C와 E
형제 관계: B와 C
세대 간 관계(아마도 더 많은 세대가 떨어져 있을 수도 있음): A와 D, A와 E
교차 관계: B와 E, D와 E 등 .
통신 방법
1. props
/$emit
props
/$emit
父组件通过v-bind
绑定一个自定义的属性,子组件通过props
接收父组件传来的数据;子组件通过$emit
触发事件,父组件用on()
或者在子组件的自定义标签上使用v-on
来监听子组件触发的自定义事件,从而接收子组件传来的数据。(学习视频分享:vue视频教程)
1、父组件向子组件传值
下面通过一个例子来说明父组件向子组件传值,父组件parent.vue把数据books:['JavaScript高级程序设计', 'CSS新世界', '图解 HTTP 彩色版']
传给子组件child.vue,并在child.vue中展示出来
// 父组件parent.vue <template> <div> <child></child> </div> </template> <script> import Child from './components/Child.vue' export default { name: 'parent', components: { Child }, data() { return { books: ['JavaScript高级程序设计', 'CSS新世界', '图解 HTTP 彩色版'] } } } </script>
// 子组件child.vue <template> <div> <ul> <li>{{item}}</li> </ul> </div> </template> <script> export default { props: { books: { type: Array, default: () => { return [] } } } } </script>
注意:通过props传递数据是单向的,父组件数据变化时会传递给子组件,但子组件不能通过修改props传过来的数据来修改父组件的相应状态,即所谓的单向数据流。
2、子组件向父组件传值
下面通过子组件点击书籍列表,用$emit()
触发,然后再父组件中获取
// 子组件child.vue <template> <div> <ul> <li>{{item}}</li> </ul> </div> </template> <script> export default { props: { books: { type: Array, default: () => { return [] } } }, methods: { like(item) { this.$emit('likeBook', item) } } } </script>
// 父组件parent.vue <template> <div> <child></child> </div> </template> <script> import Child from './components/Child.vue' export default { name: 'parent', components: { Child }, data() { return { books: ['JavaScript高级程序设计', 'CSS新世界', '图解 HTTP 彩色版'] } }, methods: { likeBook(val) { alert('我最喜欢的书籍是《' + val + '》') } } } </script>
二、$parent
/$children
- $parent:访问父组件实例
- $children:访问子组件实例
// 父组件parent.vue <template> <div> <child></child> <button>获取子组件数据</button> </div> </template> <script> import Child from './components/Child.vue' export default { name: 'parent', components: { Child }, data() { return { books: ['JavaScript高级程序设计', 'CSS新世界', '图解 HTTP 彩色版'] } }, methods: { getChildData() { alert(this.$children[0].msg) } } } </script>
// 子组件child.vue <template> <div> <ul> <li>{{item}}</li> </ul> </div> </template> <script> export default { name: 'child', data() { return { bookLists: [], msg: '我是子组件的值!' } }, mounted() { this.bookLists = this.$parent.books } } </script>
注意:$parent
拿到的是对象,如果是最顶层没有父组件的情况下拿到的是undefined
;$children
拿到的是数组,如果是做底层没有子组件的情况下,拿到的是空数组;这两种通信方式只能用于父子组件通信
三、ref
ref如果在普通Dom元素上使用,引用指向的就是 DOM 元素;如果在子组件上使用,引用就指向组件实例,可以通过实例直接调用组件的方法和数据
// 父组件parent.vue <template> <div> <child></child> <button>获取子组件数据</button> </div> </template> <script> import Child from './components/Child.vue' export default { name: 'parent', components: { Child }, methods: { getChildData() { const msg = this.$refs['child'].msg console.log(msg) this.$refs['child'].say() } } } </script>
// 子组件child.vue <script> export default { name: 'child', data() { return { msg: '我是子组件的值!' } }, methods: { say() { alert('你好,我是子组件!') } }, } </script>
四、provide
/inject
祖先组件通过provide
来提供变量,子孙组件通过inject
注入变量来获取祖先组件的数据,不管子孙组件嵌套有多深, 只要调用了inject 那么就可以注入provide中的数据。下面是具体代码:
// 父组件 <template> <div> <h1 id="康熙">康熙</h1> <son></son> </div> </template> <script> import Son from './components/Son.vue' export default { components: { Son }, provide() { return { FatherToSon: this.FatherToSon, FatherToGrandson: this.FatherToGrandson, } }, data() { return { FatherToSon: '我是康熙,雍正,你是我儿子!', FatherToGrandson: '我是康熙,乾隆,你是我孙子!', } } } </script>
// 子组件 <template> <div> <h1 id="雍正">雍正</h1> <button>接收</button> <grandson></grandson> </div> </template> <script> import Grandson from './Grandson.vue' export default { components: { Grandson }, inject: ['FatherToSon'], methods: { receive() { alert(this.FatherToSon) } } } </script>
// 孙组件 <template> <div> <h1 id="乾隆">乾隆</h1> <button>接收</button> </div> </template> <script> export default { inject: ['FatherToGrandson'], methods: { receive() { alert(this.FatherToGrandson) } } } </script>
注意:provide/inject只能从上往下传值,且不是响应式,若要变成响应式的数据provide需要提供函数
五、eventBus
的$emit
/$on
상위 구성 요소는 v-bind
를 통해 사용자 정의 속성을 바인딩합니다. > 및 하위 구성 요소는 props
를 통해 상위 구성 요소로부터 데이터를 수신하고 하위 구성 요소는 $emit
를 통해 이벤트를 트리거하며 상위 구성 요소는 on()을 사용합니다.
또는 하위 구성 요소에서 사용자 정의 태그에 v-on
을 사용하면 하위 구성 요소에서 트리거된 사용자 정의 이벤트를 수신하여 하위 구성 요소로부터 데이터를 수신할 수 있습니다. (학습 영상 공유: vue video tutorial
)
🎜1. 상위 구성 요소는 하위 구성 요소에 값을 전달합니다.🎜
🎜다음은 상위 구성 요소가 하위 구성 요소에 값을 전달하는 방법을 설명하는 예를 사용합니다. 상위 구성 요소 parent.vue는books:['JavaScript Advanced) 데이터를 저장합니다. 프로그래밍', 'CSS 신세계', '그림 HTTP 색상 버전']
은 하위 구성 요소 child.vue에 전달되어 child.vue🎜// main.js // 全局添加事件总线 Vue.prototype.$bus = new Vue()
// 父组件parent.vue <template> <div> <childa></childa> <childb></childb> </div> </template> <script> import ChildA from './components/childA' import ChildB from './components/childB' export default { components: { ChildA, ChildB } } </script>🎜

$emit()
로 트리거한 다음 상위 구성 요소에서 가져옵니다. 🎜// ChildA组件 <template> <div> <h1 id="组件A">组件A</h1> <button>发送</button> </div> </template> <script> export default { methods: { // 发送事件 send() { this.$bus.$emit('message', '欢迎使用eventBus!') } } } </script>
// ChildB组件 <template> <div> <h1 id="组件B">组件B</h1> </div> </template> <script> export default { mounted() { // 接收事件 this.$bus.$on('message', data => { alert('我是组件B,我收到的消息为:' + data) }) }, beforeDestroy() { this.$bus.$off('message') } } </script>🎜

$parent
/ $children
🎜- $parent: 상위 구성 요소 인스턴스에 액세스
- $children: 하위 구성 요소 인스턴스에 액세스
// 父组件 <template> <div> <childa></childa> </div> </template> <script> import ChildA from './components/childA' export default { name: 'parent', components: { ChildA, }, data() { return { name: '小明', age: 18, sex: '男' } }, methods: { // 获取名字 getName() { console.log('我的名字是' + this.name) }, // 获取年龄 getAge() { console.log('我今年' + this.age + '岁'); } } } </script>
// 子组件A <template> <div> <h1 id="组件A">组件A</h1> {{ msgA }} <hr> <childb></childb> </div> </template> <script> import ChildB from './childB.vue' export default { name: 'ChildA', components: { ChildB }, data() { return { msgA: null, height: '175cm' } }, props: { sex: { type: String, default: '' } }, mounted() { this.msgA = this.$attrs console.log('组件A获取的$listeners:', this.$listeners) }, methods: { // 获取身高 getHeight() { console.log('我的身高是' + this.height); } } } </script>🎜참고:
$parent
는 객체를 가져옵니다. 최상위 구성 요소이고 상위 구성 요소가 없는 경우 정의되지 않음
의 경우 $children
은 배열을 가져옵니다. . 맨 아래 레이어에 하위 구성 요소가 없으면 빈 배열을 얻습니다. 두 가지 통신 방법은 상위-하위 구성 요소 통신에만 사용할 수 있습니다🎜🎜3. 일반 Dom 요소에 사용된 경우 참조는 DOM 요소를 가리키고, 하위 구성 요소에 사용된 경우 참조는 DOM 요소를 가리킵니다. 인스턴스를 통해 구성 요소의 메서드와 데이터를 직접 호출할 수 있습니다. // 孙组件B <template> <div> <h1 id="组件B">组件B</h1> {{ msgB }} </div> </template> <script> export default { name: 'ChildB', data() { return { msgB: null } }, mounted() { this.msgB = this.$attrs console.log('组件B获取的$listeners:', this.$listeners) } } </script>
// 孙组件B export default { name: 'ChildB', inheritAttrs: false, data() { return { msgB: null } }, mounted() { this.msgB = this.$attrs console.log('组件B获取的$listeners:', this.$listeners) } }🎜 4.
provide
/inject
🎜🎜 상위 구성 요소는 provide
를 통해 제공됩니다. 하위 구성 요소는 inject를 통해 변수를 주입합니다. code>를 사용하여 상위 구성 요소의 데이터를 가져옵니다. 하위 구성 요소가 아무리 깊게 중첩되어 있어도 inject가 호출되는 한 제공되는 데이터를 주입할 수 있습니다. 다음은 구체적인 코드입니다: 🎜<pre class="brush:php;toolbar:false">// 父组件
<template>
<div>
<h1 id="父组件">父组件</h1>
<hr>
<childa></childa>
<hr>
<childb></childb>
</div>
</template>
<script>
import ChildA from &#39;./components/ChildA&#39;
import ChildB from &#39;./components/ChildB&#39;
export default {
name: &#39;parent&#39;,
components: {
ChildA,
ChildB
}
}
</script></pre>
<pre class="brush:php;toolbar:false">// 子组件A
<template>
<div>
<h1 id="组件A">组件A</h1>
<p>A获取的值: {{ count }}</p>
<button>ChildA-add</button>
</div>
</template>
<script>
export default {
computed: {
count() {
return this.$store.state.count
}
},
methods: {
// 改变store里count的值
add(num) {
this.$store.dispatch(&#39;countAdd&#39;, num)
}
}
}
</script>
<style>
</style></pre>
<pre class="brush:php;toolbar:false">// 子组件B
<template>
<div>
<h1 id="组件B">组件B</h1>
<p>B获取的值: {{ countB }}</p>
<button>ChildB-add</button>
</div>
</template>
<script>
import { mapMutations, mapGetters } from &#39;Vue 구성 요소 간에 통신하는 방법은 무엇입니까? 구성 요소 통신의 여러 가지 방법&#39;
export default {
computed: {
...mapGetters({
countB: &#39;getCount&#39;
})
},
methods: {
...mapMutations([&#39;countAdd&#39;]),
// 改变store里count的值
add(num) {
this.countAdd(num)
}
}
}
</script>
<style>
</style></pre>🎜<img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/024/67e3a6aa5a54ba35c984d3e430aed821-4.gif" class="lazy" referrerpolicy="no-referrer" alt="값 전달을 위한 제공 및 주입" title="값 전달을 위한 제공 및 주입" loading="lazy">🎜참고: 제공/주입은 위에서 아래로 값만 전달할 수 있으며 원하는 경우 응답하지 않습니다. 반응형 데이터 제공이 되려면 <code>eventBus
🎜🎜eventBus의 $emit
/$on
이 제공되어야 합니다. 메시지 센터를 기반으로 하는 메시지 전달의 메시지 구독 및 게시 패턴을 게시-구독자 패턴이라고 합니다. 🎜eventBus는 이벤트 버스라고도 합니다. Vue에서는 eventBus를 통신 브리지 개념으로 사용할 수 있습니다. 마치 모든 구성 요소가 동일한 이벤트 센터를 공유하고 이벤트를 센터에 보내거나 수신하도록 등록할 수 있으므로 구성 요소가 다른 구성 요소에 병렬로 위아래로 알릴 수 있습니다. 🎜-
$emit('name',args)
: name:发布的消息名称 , args:发布的消息 -
$on('name',fn)
: name:订阅的消息名称, fn: 订阅的消息 -
$once('name',fn)
: name:订阅的消息名称, fn: 订阅的消息。与$on相似但是只触发一次,一旦触发之后,监听器就会被移除 -
$off('name',callback)
:name:事件名称,callback:回调监听器
eventbus可以实现任何组件之前的通信,下面以兄弟组件为例1、初始化,全局引入
// main.js // 全局添加事件总线 Vue.prototype.$bus = new Vue()
2、发送事件
在parent.vue引入ChildA和ChildB组件,使它们成为兄弟组件
// 父组件parent.vue <template> <div> <childa></childa> <childb></childb> </div> </template> <script> import ChildA from './components/childA' import ChildB from './components/childB' export default { components: { ChildA, ChildB } } </script>
在ChildA组件中用$emit
发送事件
// ChildA组件 <template> <div> <h1 id="组件A">组件A</h1> <button>发送</button> </div> </template> <script> export default { methods: { // 发送事件 send() { this.$bus.$emit('message', '欢迎使用eventBus!') } } } </script>
3、接收事件发送的事件
在ChildB组件中用$on
接收ChildA发送的事件
// ChildB组件 <template> <div> <h1 id="组件B">组件B</h1> </div> </template> <script> export default { mounted() { // 接收事件 this.$bus.$on('message', data => { alert('我是组件B,我收到的消息为:' + data) }) }, beforeDestroy() { this.$bus.$off('message') } } </script>
注意:$on
监听的事件不会自动移除监听,因此在不用时最好使用$off
移除监听以免产生问题
六、$attrs
/$listeners
1、简介
当组件为两级嵌套时,一般采用props
和$emit
,但遇到多级组件嵌套时这种方法就不太适用了,如果不做中间处理,只传递数据用Vue 구성 요소 간에 통신하는 방법은 무엇입니까? 구성 요소 통신의 여러 가지 방법有点大材小用了。因此在vue2.4
中为了解决这一需求,便引入了$attrs
和$listeners
, 新增了inheritAttrs
属性
-
$attrs
:当父组件传递了很多数据给子组件时,子组件没有声明props来进行接收,么子组件中的attrs属性就包含了所有父组件传来的数据(除开已经props声明了的);子组件还可以使用v−bind="$attrs"
的形式将所有父组件传来的数据(除开已经props声明了的)传向下一级子组件,通常和interitAttrs
属性一起使用。 -
$listeners
:包含了父组件中(不含.native
修饰器的)v-on 事件监听器,通过v-on="$listeners"
,可以将这些事件绑定给它自己的子组件2、实例
下面看一个例子:
// 父组件 <template> <div> <childa></childa> </div> </template> <script> import ChildA from './components/childA' export default { name: 'parent', components: { ChildA, }, data() { return { name: '小明', age: 18, sex: '男' } }, methods: { // 获取名字 getName() { console.log('我的名字是' + this.name) }, // 获取年龄 getAge() { console.log('我今年' + this.age + '岁'); } } } </script>
// 子组件A <template> <div> <h1 id="组件A">组件A</h1> {{ msgA }} <hr> <childb></childb> </div> </template> <script> import ChildB from './childB.vue' export default { name: 'ChildA', components: { ChildB }, data() { return { msgA: null, height: '175cm' } }, props: { sex: { type: String, default: '' } }, mounted() { this.msgA = this.$attrs console.log('组件A获取的$listeners:', this.$listeners) }, methods: { // 获取身高 getHeight() { console.log('我的身高是' + this.height); } } } </script>
// 孙组件B <template> <div> <h1 id="组件B">组件B</h1> {{ msgB }} </div> </template> <script> export default { name: 'ChildB', data() { return { msgB: null } }, mounted() { this.msgB = this.$attrs console.log('组件B获取的$listeners:', this.$listeners) } } </script>
$attrs获取的结果:
$listeners获取的结果:
如代码和图所示组件A中props
声明接收了sex属性,因此组件中$attrs
获取的是父组件中绑定的除去sex属性的值;组件A中使用了v-bind="$attrs"
和v-on="$listeners"
,则组件B获取不仅是组件A中本身绑定的属性和方法还包含组件A获取父组件绑定的属性和方法
3、inheritAttrs
如果父组件传递了很多参数给子组件,而子组件没有用props完全接收,那么没有接收的这些属性作为普通的 HTML attribute
应用在子组件的根元素上
如果你不希望子组件的根元素继承特性,你可以在组件的选项中设置inheritAttrs: false
以上面的组件B为例,当Vue 구성 요소 간에 통신하는 방법은 무엇입니까? 구성 요소 통신의 여러 가지 방법(inheritAttrs默认为true)
当Vue 구성 요소 간에 통신하는 방법은 무엇입니까? 구성 요소 통신의 여러 가지 방법
// 孙组件B export default { name: 'ChildB', inheritAttrs: false, data() { return { msgB: null } }, mounted() { this.msgB = this.$attrs console.log('组件B获取的$listeners:', this.$listeners) } }
七、Vuex
1、Vuex概述
Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式 + 库。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。
状态管理包含以下几个部分:
- 状态(State),驱动应用的数据源
- 视图(View),以声明方式将状态映射到视图;
- 操作(Actions),响应在视图上的用户输入导致的状态变化
视图发生变化会导致数据源的改变,数据源发生变化则会改变视图,则上面表示是一个“单向数据流”。但是当我们的应用遇到多个组件共享状态时,单向数据流的简洁性很容易被破坏:
- 多个视图依赖于同一状态。
- 来自不同视图的行为需要变更同一状态。
因此,为了解决这种问题我们把组件的共享状态抽取出来,以一个全局单例模式管理。在这种模式下,我们的组件树构成了一个巨大的“视图”,不管在树的哪个位置,任何组件都能获取状态或者触发行为!
通过定义和隔离状态管理中的各种概念并通过强制规则维持视图和状态间的独立性,我们的代码将会变得更结构化且易维护。
2、 Vuex各个模块
1、state
:存储应用中需要共享的状态,是Vuex中的唯一数据源。
2、getters
:类似Vue中的计算属性computed
,getter 的返回值会根据它的依赖被缓存起 来,且只有当它的依赖值发生了改变才会被重新计算。
3、mutations
:更改 Vuex 的 store 中的状态(state)的唯一方法,且mutation 必须是同步函数
4、actions
:类似于 mutation,提交的是 mutation,而不是直接变更状态;可以包含任意异步操作
5、modules
:将 store 分割成模块(module)。每个模块拥有自己的 state、mutation、action、getter、甚至是嵌套子模块——从上至下进行同样方式的分割
3、Vuex举例
// 父组件 <template> <div> <h1 id="父组件">父组件</h1> <hr> <childa></childa> <hr> <childb></childb> </div> </template> <script> import ChildA from './components/ChildA' import ChildB from './components/ChildB' export default { name: 'parent', components: { ChildA, ChildB } } </script>
// 子组件A <template> <div> <h1 id="组件A">组件A</h1> <p>A获取的值: {{ count }}</p> <button>ChildA-add</button> </div> </template> <script> export default { computed: { count() { return this.$store.state.count } }, methods: { // 改变store里count的值 add(num) { this.$store.dispatch('countAdd', num) } } } </script> <style> </style>
// 子组件B <template> <div> <h1 id="组件B">组件B</h1> <p>B获取的值: {{ countB }}</p> <button>ChildB-add</button> </div> </template> <script> import { mapMutations, mapGetters } from 'Vue 구성 요소 간에 통신하는 방법은 무엇입니까? 구성 요소 통신의 여러 가지 방법' export default { computed: { ...mapGetters({ countB: 'getCount' }) }, methods: { ...mapMutations(['countAdd']), // 改变store里count的值 add(num) { this.countAdd(num) } } } </script> <style> </style>
store.js
import Vue from 'vue' import Vuex from 'Vue 구성 요소 간에 통신하는 방법은 무엇입니까? 구성 요소 통신의 여러 가지 방법' Vue.use(Vuex) export default new Vuex.Store({ state: { count: 0, }, getters: { getCount: (state) => { return state.count } }, mutations: { countAdd(state, num) { state.count += num } }, actions: { countAdd(context, num) { context.commit('countAdd', num) } }, modules: { } })
八、localStorage
/sessionStorage
1、介绍
localStorage:本地存储对象,存储的数据是永久性数据,页面刷新,即使浏览器重启,除非主动删除不然存储的数据会一直存在
sessionStorage:与localStorage相似,但是只有在当前页面下有效,关闭页面或浏览器存储的数据将会清空
localStorage和sessionStorage常用的API:
setItem (key, value) —— 保存数据,以键值对的方式储存信息。 getItem (key) —— 获取数据,将键值传入,即可获取到对应的value值。 removeItem (key) —— 删除单个数据,根据键值移除对应的信息。 clear () —— 删除所有的数据 key (index) —— 获取某个索引的key
2、举例
// 存储 setItem() { window.localStorage.setItem('name1', '小明') window.sessionStorage.setItem('name2', '小红') }
// 接收 receive() { const name1 = window.localStorage.getItem('name1') const name2 = window.sessionStorage.getItem('name2') console.log(name1) // 打印结果为:小明 console.log(name2) // 打印结果为:小红 }
3、setItem()和getItem()使用时的类型转换
localStorage和sessionStorage通过setItem()
存储数据会自动转换为String
类型,但是通过getItem()
其类型并不会转换回来(localStorage和sessionStorage使用方法一样,下面均以localStorage为例)
const num = 1 window.localStorage.setItem('num', num) const numRec = window.localStorage.getItem('num') console.log(numRec, typeof(numRec)) // 1 string
因此正确的存储方式应该为:存储之前用JSON.stringify()
方法将数据转换成json字符串
形式;需要使用数据的时候用JSON.parse()
方法将之前存储的字符串转换成json对象
const num = 1 window.localStorage.setItem('num', JSON.stringify(num)) const obj = { name: '小红', age: 18 } window.localStorage.setItem('obj', JSON.stringify(obj)) const numRec = JSON.parse(window.localStorage.getItem('num')) console.log(numRec, typeof(numRec)) // 1 'number' const objRec = JSON.parse(window.localStorage.getItem('obj')) console.log(objRec, typeof(objRec)) // {name: '小红', age: 18} 'object'
注意:localStorage.setItem()和sessionStorage.setItem()不能直接存储对象,必须使用JSON.stringify()
和JSON.parse()
转换实现
总结
以上8种通信方式主要应用在以下三类场景:
-
상위-하위 구성요소 통신: 가장 일반적으로 사용되는 통신 방법은
props
/$emit
입니다. 단일 상위-하위 구성요소는$ parent> code>/<code>$children
은 또한 더 편리합니다. 상위 구성 요소는 종종ref
를 사용하여 하위 구성 요소 인스턴스를 얻습니다.provide를 사용할 수도 있습니다. code>/<code> 주입
,$attrs
/$listeners
및localStorage
/sessionStorage
props
/$emit
,单一的父子组件通信使用$parent>
/$children
也比较方便;父组件也常使用ref
获取子组件实例;也可使用provide
/inject
、$attrs
/$listeners
以及localStorage
/sessionStorage
-
兄弟组件通信:简单的数据传递可使用
eventBus
的$emit
/$on
;复杂的数据使用Vuex
比较方便;也可以使用localStorage
/sessionStorage
; -
跨级组件通信:父子孙等嵌套组件通信方式多使用
provide
/inject
和$attrs
/$listeners
;跨级组件通信的数据如果不复杂可使用eventBus
和localStorage
/sessionStorage
;如果数据复杂可使用Vuex
간단한 데이터 전송은 eventBus
의 $emit
/$on
을 사용할 수 있습니다. Vuex
code>가 더 편리합니다. localStorage
/sessionStorage
를 사용할 수도 있습니다.
교차 수준 구성 요소 통신: 부모, 자녀 및 다른 중첩 구성 요소 통신 방법은 대부분 provide
/inject
및 $attrs
/$listeners
를 사용합니다. 크로스레벨 구성 요소 간 통신은 복잡하지 않으며 eventBus를 사용할 수 있습니다
. 데이터가 복잡하면 localStorage
/sessionStorage
를 사용할 수 있습니다. code>Vuex
위 내용은 Vue 구성 요소 간에 통신하는 방법은 무엇입니까? 구성 요소 통신의 여러 가지 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

Netflix는 React를 프론트 엔드 프레임 워크로 사용합니다. 1) React의 구성 요소화 된 개발 모델과 강력한 생태계가 Netflix가 선택한 주된 이유입니다. 2) 구성 요소화를 통해 Netflix는 복잡한 인터페이스를 비디오 플레이어, 권장 목록 및 사용자 댓글과 같은 관리 가능한 청크로 분할합니다. 3) React의 가상 DOM 및 구성 요소 수명주기는 렌더링 효율성 및 사용자 상호 작용 관리를 최적화합니다.

프론트 엔드 기술에서 Netflix의 선택은 주로 성능 최적화, 확장 성 및 사용자 경험의 세 가지 측면에 중점을 둡니다. 1. 성능 최적화 : Netflix는 React를 주요 프레임 워크로 선택하고 Speedcurve 및 Boomerang과 같은 도구를 개발하여 사용자 경험을 모니터링하고 최적화했습니다. 2. 확장 성 : 마이크로 프론트 엔드 아키텍처를 채택하여 응용 프로그램을 독립 모듈로 분할하여 개발 효율성 및 시스템 확장 성을 향상시킵니다. 3. 사용자 경험 : Netflix는 재료 -UI 구성 요소 라이브러리를 사용하여 A/B 테스트 및 사용자 피드백을 통해 인터페이스를 지속적으로 최적화하여 일관성과 미학을 보장합니다.

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는 더 풍부한 생태계를 가지고 있으며 고성능 및 복잡한 기능적 요구가있는 프로젝트에 적합합니다.


핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

드림위버 CS6
시각적 웹 개발 도구

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.
