再也不用担心组件跨层级的数据共享和方法驱动了

86 阅读5分钟

项目中关于组件的使用经常会碰到这种情况:父子组件传和方法调用、兄弟组件的传值和方法调用、多个独立组件的数据共享和方法调用,例如:a、b组件的的数据共享,该数据是由c传出的,通过a、b组件修改共享参数,调用c方法实现a、b组件的数据更新。本文总结了上述的几种情况并分别讲解。

兄弟组件的传值和方法调用

框架:vue2
通过组件ref调用组件内的方法
父组件

                                                <--! js部分 -->
                                                methods: {
                                                   save() {
                                                         // 通过ref调用兄弟组件的方法
                                                               this.$refs.listNode.submit();
                                                                  }
                                                                  }" title="" data-bs-original-title="复制" aria-label="复制"></button>
</div>
      </div><pre class="js hljs language-javascript">&lt;template&gt;
            <span class="language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">div</span>&gt;</span>
                     <span class="hljs-tag">&lt;<span class="hljs-name">MyA</span> @<span class="hljs-attr">save</span>=<span class="hljs-string">"save"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">MyA</span>&gt;</span>
                              <span class="hljs-tag">&lt;<span class="hljs-name">MyB</span> <span class="hljs-attr">ref</span>=<span class="hljs-string">"listNode"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">MyB</span>&gt;</span>
                                    <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span></span>
                                    &lt;/template&gt;
                                    
                                    <span class="language-xml">&lt;--! js部分 --&gt;
                                    methods: {
                                       save() {
                                             // 通过ref调用兄弟组件的方法
                                                   this.$refs.listNode.submit();
                                                      }
                                                      }</span></pre><p><strong>组件一</strong></p><div class="widget-codetool" style="display: none;">
      <div class="widget-codetool--inner">
                  <button type="button" class="btn btn-dark far fa-copy rounded-0 sflex-center copyCode" data-toggle="tooltip" data-placement="top" data-clipboard-text="// MyA
                  <el-button type=&quot;parimary&quot; size=&quot;mini&quot; @click=&quot;sure&quot;>确定</el-button>
                  // js
                  methods: {
                     sure() {
                           // 保存点击,数据通过$emit传出
                                 this.$emit('save')
                                    }
                                    }" title="" data-bs-original-title="复制" aria-label="复制"></button>
</div>
      </div><pre class="javascript hljs language-javascript"><span class="hljs-comment">// MyA</span>
      &lt;el-button type=<span class="hljs-string">"parimary"</span> size=<span class="hljs-string">"mini"</span> @click=<span class="hljs-string">"sure"</span>&gt;确定&lt;/el-button&gt;
      <span class="hljs-comment">// js</span>
      <span class="hljs-attr">methods</span>: {
         <span class="hljs-title function_">sure</span>(<span class="hljs-params"></span>) {
               <span class="hljs-comment">// 保存点击,数据通过$emit传出</span>
                     <span class="hljs-variable language_">this</span>.$emit(<span class="hljs-string">'save'</span>)
                        }
                        }</pre><p><strong>组件二</strong></p><div class="widget-codetool" style="display: none;">
      <div class="widget-codetool--inner">
                  <button type="button" class="btn btn-dark far fa-copy rounded-0 sflex-center copyCode" data-toggle="tooltip" data-placement="top" data-clipboard-text="// MyB
                  <el-button type=&quot;parimary&quot; size=&quot;mini&quot; @click=&quot;submit&quot;>提交</el-button>
                  // js
                  methods: {
                     submit() {
                           console.log('方法被触发了')
                              }
                              }" title="" data-bs-original-title="复制" aria-label="复制"></button>
</div>
      </div><pre class="javascript hljs language-javascript"><span class="hljs-comment">// MyB</span>
      &lt;el-button type=<span class="hljs-string">"parimary"</span> size=<span class="hljs-string">"mini"</span> @click=<span class="hljs-string">"submit"</span>&gt;提交&lt;/el-button&gt;
      <span class="hljs-comment">// js</span>
      <span class="hljs-attr">methods</span>: {
         <span class="hljs-title function_">submit</span>(<span class="hljs-params"></span>) {
               <span class="hljs-variable language_">console</span>.<span class="hljs-title function_">log</span>(<span class="hljs-string">'方法被触发了'</span>)
                  }
                  }</pre><p><code>A</code>组件通过<code>emit</code>将方法回传,父组件触发<code>A</code>组件回传的事件,在父组件中通过<code>ref</code>在调用<code>B</code>组件内的事件。</p><p></p><hr><p></p><h2 id="item-0-2">多个独立组件的数据共享和方法调用</h2><h4>多个组件内的方法和数据互相驱动:eventBus</h4><p><strong>框架:vue2</strong><br>新建一个<code>eventBus.js</code>,定义事件全局事件总线。</p><div class="widget-codetool" style="display: none;">
      <div class="widget-codetool--inner">
                  <button type="button" class="btn btn-dark far fa-copy rounded-0 sflex-center copyCode" data-toggle="tooltip" data-placement="top" data-clipboard-text="// eventBus.js
                  import Vue from 'vue'
                  export default new Vue();
                  // 该文件就两行" title="" data-bs-original-title="复制" aria-label="复制"></button>
</div>
      </div><pre class="javascript hljs language-javascript"><span class="hljs-comment">// eventBus.js</span>
      <span class="hljs-keyword">import</span> <span class="hljs-title class_">Vue</span> <span class="hljs-keyword">from</span> <span class="hljs-string">'vue'</span>
      <span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">Vue</span>();
      <span class="hljs-comment">// 该文件就两行</span></pre><p>引入到<code>main</code>文件,挂载到<code>vue</code>原型上</p><div class="widget-codetool" style="display: none;">
      <div class="widget-codetool--inner">
                  <button type="button" class="btn btn-dark far fa-copy rounded-0 sflex-center copyCode" data-toggle="tooltip" data-placement="top" data-clipboard-text="// main.js
                  import Vue from 'vue'
                  import eventBus from '@/utils/eventBus.js'
                  // .....
                  
                  Vue.prototype.$bus = eventBus // 挂载到原型
                  // ..." title="" data-bs-original-title="复制" aria-label="复制"></button>
</div>
      </div><pre class="javascript hljs language-javascript"><span class="hljs-comment">// main.js</span>
      <span class="hljs-keyword">import</span> <span class="hljs-title class_">Vue</span> <span class="hljs-keyword">from</span> <span class="hljs-string">'vue'</span>
      <span class="hljs-keyword">import</span> eventBus <span class="hljs-keyword">from</span> <span class="hljs-string">'@/utils/eventBus.js'</span>
      <span class="hljs-comment">// .....</span>
      
      <span class="hljs-title class_">Vue</span>.<span class="hljs-property"><span class="hljs-keyword">prototype</span></span>.<span class="hljs-property">$bus</span> = eventBus <span class="hljs-comment">// 挂载到原型</span>
      <span class="hljs-comment">// ...</span></pre><p>然后就可以在页面中使用了,使用的页面需要引入<code>eventBus.js</code></p><div class="widget-codetool" style="display: none;">
      <div class="widget-codetool--inner">
                  <button type="button" class="btn btn-dark far fa-copy rounded-0 sflex-center copyCode" data-toggle="tooltip" data-placement="top" data-clipboard-text="// A组件
                  import bus from '@/utils/eventBus.js'
                  
                  methods: {
                        // 分页
                              handleSizeChange(val) {
                                    // 广播方法
                                            bus.$emit('sizeChange',{page : val })
                                                  },
                                                  }" title="" data-bs-original-title="复制" aria-label="复制"></button>
</div>
      </div><pre class="javascript hljs language-javascript"><span class="hljs-comment">// A组件</span>
      <span class="hljs-keyword">import</span> bus <span class="hljs-keyword">from</span> <span class="hljs-string">'@/utils/eventBus.js'</span>
      
      <span class="hljs-attr">methods</span>: {
            <span class="hljs-comment">// 分页</span>
                  <span class="hljs-title function_">handleSizeChange</span>(<span class="hljs-params">val</span>) {
                        <span class="hljs-comment">// 广播方法</span>
                                bus.$emit(<span class="hljs-string">'sizeChange'</span>,{page : val })
                                      },
                                      }</pre><div class="widget-codetool" style="display: none;">
      <div class="widget-codetool--inner">
                  <button type="button" class="btn btn-dark far fa-copy rounded-0 sflex-center copyCode" data-toggle="tooltip" data-placement="top" data-clipboard-text="// B组件
                  import bus from '@/utils/eventBus.js'
                  
                  created() {
                        // $off解绑
                              bus.$off( 'sizeChange' );   // 使用前先解绑,否则在某些情况下会触发两次
                                    // $on监听触发
                                          bus.$on('sizeChange', (val) => {
                                                  // 事件内的操作....
                                                          this.getTable(val);
                                                                })
                                                                },
                                                                methods: {
                                                                      getTable(val) {
                                                                                // 通过bus触发
                                                                                          console.log(val); // { page: val }
                                                                                                },
                                                                                                }" title="" data-bs-original-title="复制" aria-label="复制"></button>
</div>
      </div><pre class="javascript hljs language-javascript"><span class="hljs-comment">// B组件</span>
      <span class="hljs-keyword">import</span> bus <span class="hljs-keyword">from</span> <span class="hljs-string">'@/utils/eventBus.js'</span>
      
      <span class="hljs-title function_">created</span>(<span class="hljs-params"></span>) {
            <span class="hljs-comment">// $off解绑</span>
                  bus.$off( <span class="hljs-string">'sizeChange'</span> );   <span class="hljs-comment">// 使用前先解绑,否则在某些情况下会触发两次</span>
                        <span class="hljs-comment">// $on监听触发</span>
                              bus.$on(<span class="hljs-string">'sizeChange'</span>, <span class="hljs-function">(<span class="hljs-params">val</span>) =&gt;</span> {
                                      <span class="hljs-comment">// 事件内的操作....</span>
                                              <span class="hljs-variable language_">this</span>.<span class="hljs-title function_">getTable</span>(val);
                                                    })
                                                    },
                                                    <span class="hljs-attr">methods</span>: {
                                                          <span class="hljs-title function_">getTable</span>(<span class="hljs-params">val</span>) {
                                                                    <span class="hljs-comment">// 通过bus触发</span>
                                                                              <span class="hljs-variable language_">console</span>.<span class="hljs-title function_">log</span>(val); <span class="hljs-comment">// { page: val }</span>
                                                                                    },
                                                                                    }</pre><blockquote>需要注意的是,<code>eventBus</code><code>$on</code> 事件需要在<code>created</code>等生命周期中使用,如果写在<code>methods</code>中使不会自动触发的。使用 <code>$on</code> 事件的时候需要先解绑,否则页面刷新后监听事件没有解绑,后续再次广播事件会触发两次。解绑可以在<code>beforeDestory</code>中操作也可以 <code>$off 后接 $on</code> 解绑后监听</blockquote><p><br><code>eventBus</code>相当于一个全局事件池,向全局事件池中添加和传入事件,事件池的事件可以作用于全局。</p><p></p><hr><p></p><h4>多个组件的数据共享以及数据修改:vuex</h4><p><strong>框架:vue3</strong><br><code>vuex</code>中可以存储全局数据以及事件,我们可以在任何页面访问<code>vuex</code>中的事件和方法,随着项目持续维护,我们不可能直接在<code>store</code>中的<code>index</code>中直接添加数据和方法,因此<code>vuex</code>提供了<code>module</code>功能,可以让我们分别管理自己独立的<code>module</code>模块。</p><blockquote>官网上是这么说的:<br>由于使用单一状态树,应用的所有状态会集中到一个比较大的对象。当应用变得非常复杂时,store 对象就有可能变得相当臃肿。<br>为了解决以上问题,Vuex 允许我们将 store 分割成模块(module)。每个模块拥有自己的 state、mutation、action、getter、甚至是嵌套子模块——从上至下进行同样方式的分割。</blockquote><div class="widget-codetool" style="display: none;">
      <div class="widget-codetool--inner">
                  <button type="button" class="btn btn-dark far fa-copy rounded-0 sflex-center copyCode" data-toggle="tooltip" data-placement="top" data-clipboard-text="npm install vuex@next --save" title="" data-bs-original-title="复制" aria-label="复制"></button>
</div>
      </div><pre class="javascript hljs language-javascript">npm install vuex@next --save</pre><div class="widget-codetool" style="display: none;">
      <div class="widget-codetool--inner">
                  <button type="button" class="btn btn-dark far fa-copy rounded-0 sflex-center copyCode" data-toggle="tooltip" data-placement="top" data-clipboard-text="// sotre -> my_module
                  const my_module = {
                      state: () => ({ 
                              my_count : 0,
                                      my_info : {
                                                  id : 1,
                                                              name : '我的模块'
                                                                      }
                                                                          }),
                                                                              mutations: { 
                                                                                      countChange(state,val) {
                                                                                                  state.my_count += val
                                                                                                          }
                                                                                                               },
                                                                                                                   actions: { 
                                                                                                                           // actions不直接修改数据
                                                                                                                                   // context为store中的上下文,通过commit驱动mutations的方法来实现数据修改
                                                                                                                                           countTen(context,num){
                                                                                                                                                       setTimeout(()=>{
                                                                                                                                                                       context.commit('countChange',num.num)
                                                                                                                                                                                   },500)
                                                                                                                                                                                           }
                                                                                                                                                                                                },
                                                                                                                                                                                                    getters: { 
                                                                                                                                                                                                            getMyName (state) {
                                                                                                                                                                                                                       return `这是${state.my_info.name}`
                                                                                                                                                                                                                               },
                                                                                                                                                                                                                                       getMyCount (state) {
                                                                                                                                                                                                                                                   return `我的总数:${state.my_count}`
                                                                                                                                                                                                                                                            }
                                                                                                                                                                                                                                                                 }
                                                                                                                                                                                                                                                                 }
                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                 export default my_module;" title="" data-bs-original-title="复制" aria-label="复制"></button>
</div>
      </div><pre class="javascript hljs language-javascript"><span class="hljs-comment">// sotre -&gt; my_module</span>
      <span class="hljs-keyword">const</span> my_module = {
          <span class="hljs-attr">state</span>: <span class="hljs-function">() =&gt;</span> ({ 
                  my_count : <span class="hljs-number">0</span>,
                          my_info : {
                                      id : <span class="hljs-number">1</span>,
                                                  name : <span class="hljs-string">'我的模块'</span>
                                                          }
                                                              }),
                                                                  <span class="hljs-attr">mutations</span>: { 
                                                                          <span class="hljs-title function_">countChange</span>(<span class="hljs-params">state,val</span>) {
                                                                                      state.<span class="hljs-property">my_count</span> += val
                                                                                              }
                                                                                                   },
                                                                                                       <span class="hljs-attr">actions</span>: { 
                                                                                                               <span class="hljs-comment">// actions不直接修改数据</span>
                                                                                                                       <span class="hljs-comment">// context为store中的上下文,通过commit驱动mutations的方法来实现数据修改</span>
                                                                                                                               <span class="hljs-title function_">countTen</span>(<span class="hljs-params">context,num</span>){
                                                                                                                                           <span class="hljs-built_in">setTimeout</span>(<span class="hljs-function">()=&gt;</span>{
                                                                                                                                                           context.<span class="hljs-title function_">commit</span>(<span class="hljs-string">'countChange'</span>,num.<span class="hljs-property">num</span>)
                                                                                                                                                                       },<span class="hljs-number">500</span>)
                                                                                                                                                                               }
                                                                                                                                                                                    },
                                                                                                                                                                                        <span class="hljs-attr">getters</span>: { 
                                                                                                                                                                                                getMyName (state) {
                                                                                                                                                                                                           <span class="hljs-keyword">return</span> <span class="hljs-string">`这是<span class="hljs-subst">${state.my_info.name}</span>`</span>
                                                                                                                                                                                                                   },
                                                                                                                                                                                                                           getMyCount (state) {
                                                                                                                                                                                                                                       <span class="hljs-keyword">return</span> <span class="hljs-string">`我的总数:<span class="hljs-subst">${state.my_count}</span>`</span>
                                                                                                                                                                                                                                                }
                                                                                                                                                                                                                                                     }
                                                                                                                                                                                                                                                     }
                                                                                                                                                                                                                                                     
                                                                                                                                                                                                                                                     <span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> my_module;</pre><div class="widget-codetool" style="display: none;">
      <div class="widget-codetool--inner">
                  <button type="button" class="btn btn-dark far fa-copy rounded-0 sflex-center copyCode" data-toggle="tooltip" data-placement="top" data-clipboard-text="// store -> index.js
                  import { createStore } from &quot;vuex&quot;;
                  import my_module from &quot;./my_module&quot;;
                  // 创建store实例
                  const store = createStore({
                      // 将my_module 挂载到modules中
                          modules: {
                                  my_module
                                      }
                                      })
                                      
                                      export default store;" title="" data-bs-original-title="复制" aria-label="复制"></button>
</div>
      </div><pre class="javascript hljs language-javascript"><span class="hljs-comment">// store -&gt; index.js</span>
      <span class="hljs-keyword">import</span> { createStore } <span class="hljs-keyword">from</span> <span class="hljs-string">"vuex"</span>;
      <span class="hljs-keyword">import</span> my_module <span class="hljs-keyword">from</span> <span class="hljs-string">"./my_module"</span>;
      <span class="hljs-comment">// 创建store实例</span>
      <span class="hljs-keyword">const</span> store = <span class="hljs-title function_">createStore</span>({
          <span class="hljs-comment">// 将my_module 挂载到modules中</span>
              <span class="hljs-attr">modules</span>: {
                      my_module
                          }
                          })
                          
                          <span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> store;</pre><div class="widget-codetool" style="display: none;">
      <div class="widget-codetool--inner">
                  <button type="button" class="btn btn-dark far fa-copy rounded-0 sflex-center copyCode" data-toggle="tooltip" data-placement="top" data-clipboard-text="// main.js
                  import { createApp } from 'vue'
                  import './style.css'
                  import App from './App.vue'
                  import store from './store/index'  // 导入vuex
                  
                  createApp(App)
                  .use(store)   // 挂载vuex
                  .mount('#app')" title="" data-bs-original-title="复制" aria-label="复制"></button>
</div>
      </div><pre class="javascript hljs language-javascript"><span class="hljs-comment">// main.js</span>
      <span class="hljs-keyword">import</span> { createApp } <span class="hljs-keyword">from</span> <span class="hljs-string">'vue'</span>
      <span class="hljs-keyword">import</span> <span class="hljs-string">'./style.css'</span>
      <span class="hljs-keyword">import</span> <span class="hljs-title class_">App</span> <span class="hljs-keyword">from</span> <span class="hljs-string">'./App.vue'</span>
      <span class="hljs-keyword">import</span> store <span class="hljs-keyword">from</span> <span class="hljs-string">'./store/index'</span>  <span class="hljs-comment">// 导入vuex</span>
      
      <span class="hljs-title function_">createApp</span>(<span class="hljs-title class_">App</span>)
      .<span class="hljs-title function_">use</span>(store)   <span class="hljs-comment">// 挂载vuex</span>
      .<span class="hljs-title function_">mount</span>(<span class="hljs-string">'#app'</span>)</pre><div class="widget-codetool" style="display: none;">
      <div class="widget-codetool--inner">
                  <button type="button" class="btn btn-dark far fa-copy rounded-0 sflex-center copyCode" data-toggle="tooltip" data-placement="top" data-clipboard-text="// 页面中使用
                  <template>
                      <div>
                              <div>vuex——module</div>
                                      <div>store中的值:{{ store.getters.getMyName }}</div>
                                              <div>store中的值:{{ store.getters.getMyCount }}</div>
                                                      <button @click=&quot;addMyNum&quot;>count++</button>  
                                                              <button @click=&quot;numMyTen&quot;>每次加10</button>  
                                                                  </div>
                                                                  </template>
                                                                  
                                                                  <script setup>
                                                                  import { ref,computed} from &quot;vue&quot; 
                                                                  import { useStore} from 'vuex' // vue3中通过useStore使用store
                                                                  const store = useStore();
                                                                  
                                                                  // vuex-module
                                                                  const addMyNum = () => {
                                                                    store.commit('countChange',1)
                                                                    }
                                                                    
                                                                    const numMyTen = () => {
                                                                      store.dispatch('countTen',{num:10})
                                                                      }
                                                                      </script>" title="" data-bs-original-title="复制" aria-label="复制"></button>
</div>
      </div><pre class="javascript hljs language-javascript"><span class="hljs-comment">// 页面中使用</span>
      &lt;template&gt;
          <span class="language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">div</span>&gt;</span>
                  <span class="hljs-tag">&lt;<span class="hljs-name">div</span>&gt;</span>vuex——module<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
                          <span class="hljs-tag">&lt;<span class="hljs-name">div</span>&gt;</span>store中的值:{{ store.getters.getMyName }}<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
                                  <span class="hljs-tag">&lt;<span class="hljs-name">div</span>&gt;</span>store中的值:{{ store.getters.getMyCount }}<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
                                          <span class="hljs-tag">&lt;<span class="hljs-name">button</span> @<span class="hljs-attr">click</span>=<span class="hljs-string">"addMyNum"</span>&gt;</span>count++<span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span>  
                                                  <span class="hljs-tag">&lt;<span class="hljs-name">button</span> @<span class="hljs-attr">click</span>=<span class="hljs-string">"numMyTen"</span>&gt;</span>每次加10<span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span>  
                                                      <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span></span>
                                                      &lt;/template&gt;
                                                      
                                                      <span class="language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">setup</span>&gt;</span><span class="language-javascript">
                                                      <span class="hljs-keyword">import</span> { ref,computed} <span class="hljs-keyword">from</span> <span class="hljs-string">"vue"</span> 
                                                      <span class="hljs-keyword">import</span> { useStore} <span class="hljs-keyword">from</span> <span class="hljs-string">'vuex'</span> <span class="hljs-comment">// vue3中通过useStore使用store</span>
                                                      <span class="hljs-keyword">const</span> store = <span class="hljs-title function_">useStore</span>();
                                                      
                                                      <span class="hljs-comment">// vuex-module</span>
                                                      <span class="hljs-keyword">const</span> <span class="hljs-title function_">addMyNum</span> = (<span class="hljs-params"></span>) =&gt; {
                                                        store.<span class="hljs-title function_">commit</span>(<span class="hljs-string">'countChange'</span>,<span class="hljs-number">1</span>)
                                                        }
                                                        
                                                        <span class="hljs-keyword">const</span> <span class="hljs-title function_">numMyTen</span> = (<span class="hljs-params"></span>) =&gt; {
                                                          store.<span class="hljs-title function_">dispatch</span>(<span class="hljs-string">'countTen'</span>,{<span class="hljs-attr">num</span>:<span class="hljs-number">10</span>})
                                                          }
                                                          </span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span></span></pre><p></p><blockquote>vuex一般用来做全局状态管理,并不建议向vuex中存储非全局的事件和方法,如果所有的跨组件事件和方法都向vuex中存储,随着项目的持续维护,store中的数据就会越来越多,会导致vuex维护成本变高。</blockquote><p></p><hr><p></p><p><a href="https://link.segmentfault.com/?enc=TOuan6YUQLi3x3rLwrWSHg%3D%3D.LgMdvmLDvQ%2B9OgfstFQf62eCUqEPDs9ZbIN3qazdicqT6ng3Xlu%2BW0oyR81oAH2cQvxX38HDqjco6EI4KTfDp3ing90ppEmyxU%2FWGsH3HHiH93VdZS%2BVZzktE9h47qbF0WV7o9b9OzPqUVFT4gBEz1vPMKXXburUOAPV0pvvtQCafQalaU9D92LrFDicPGa5a0O7E8YMACbdGmhBdc6d6c9w%2FnRbipsC%2BjKB8KeQotavTDGDwciVuS9sWiVlS2gTAP9XlQtK2CcVr5mWzRdOOhnjCqLq%2BkWVZRpfuiRzzKQ0z8jn0CvIMoBRavyp39%2BkMrXZHCxNeU%2Fbfrbj9J7Sdou4HuV2i3p7HbxL8k1V7AWxg6TddRqMC%2BA9olEHkRa8Soemu4bmDZgqBuGz0UwBQI4bxGssvkvnPccYCJDnV5AZdWzjDljujZVMMqTPMWSJajJo1ENItGsSRrT1i4m7Mik9B87jniDXu5Mlb26sEDAtyyulUMX1UN2bOFJNh49RJkwJLuLA620V2aMBuYjbz11h5VstGxBB%2FvSHFAWJ7BS3SbU3oDLcp1Qd1G02n3OVClThoxV7nyiyf%2BPT6BOnmUtSnC27WcYlotnRKgSqe%2BU%3D" rel="nofollow" target="_blank">vue3-setup组件传值</a> (👈点击直达)<br><a href="https://link.segmentfault.com/?enc=ZDglc2YEGutxxAs%2BHQYPog%3D%3D.cg0NIS7KEk1GSf2WWX4CDFmEhIT2nuHlWUYpGnr3%2BYb0v0nu%2FNcKfoLIDX91zBInSWeJ7HzukKSglUQslRqbyFqarteM8DU0zct4e3Wj1zp2ACjTsV3nTSCrNmfFTZarOjbVs2rok%2BY4xlq9JXxTClZ4yIk03LFuZdrG6ZYF7I2Vxy%2BnLf%2BgcBSaSrlV3Y1ubQ6d4GFOnWTrjQo2p%2Bc8XFvmJMoaC0JdOXyMAR3QujsPxU03pvBMxG3k7AdvllMSgZfjTid1Rf9Xgk4DH77APHeRM1gO6gAMsN0bb3KylW1nGJZFizUaImDn%2FiuN%2BIQffd9S9OnU%2FS%2BeHzZB8xi0ng3x5nxFG59SXX8hHoPuFh5SMku8kB325F6NRicprXtu28YyiM6R3YxDF5ahBHwc8tYQ1GW9iAKtEqxV7hMYWCuHTxV5SrYXshU7WfoujYqCmj4gLIYSOUMZpB8TShdrrAscevR8f9eGKAtjvz35Uypoi%2FGwSxyBMbZXdww%2Bo%2FM7jFqUs3Lsv%2BkggD9QHD%2Fyv35fidWSdjYS0T1H8Uutr4bqkBeBlM9bxcYDGA3rGSWxbTlAku%2Bk%2B9GEght0WiubEOaZJDlkjnPiSuZHp5M7mRk%3D" rel="nofollow" target="_blank">微信小程序组件封装传值以及问题点规避</a> (👈点击直达)<br><a href="https://link.segmentfault.com/?enc=wPw9Lh6Mzi%2F942Qzpf5fPg%3D%3D.8R4cYDwcdPhnWKBTDlnecGudKK%2FtMk3coCJzvvtPvI%2B1JwsvBfOS57ioyWArShDMqxvzGEKV8aKJ9FQrzFnPrnVZs%2By23hYwVRzVJNW5qgO7KB7jDISzUfpmvhfNCdBvB4zEemJ1Br63HLxDl9KmE%2BW9Ncn%2FU%2BZLVzm7EzRsj6AaTr%2BTw5qSWNoMq%2FbXcW825drdQIESO16VBe8bepKC9pWs4DGJuJmYlLFPQ8SoUmqxWjnl1HUS9MfWDIZHhFs%2F%2FuzKVncIswLlvRNezYNIZTeMmOIkYmdS0BlKyrwZhC5ZQExjqdfsD4ARVFv8OaVQANrG%2FqBJVemT64pnET7%2Fy5%2Bu%2BM%2Bp0aojZ%2FFh4AhYvDQn17jBwEL6ptjxc61%2Fjgqkh6Hbp6IRzDb1b6hAGiUMxahBgv9UhAXLvnd8t2p7HvuxTKncabMfOPt9AE9XU5VlAyQyEDZTxpq4dBaODUWrIDULEt%2Fuk4lVqogbck9tyagr388Ye%2Bjxucwsnz966ozDrKVJYgWFW5kk%2FX%2Bifts1E%2F2GU%2Be3v8IGkRZ9%2B5W5sJD%2FFYKV5pbsjywX3JtnvK7RXCEzBFlREZ9xFJ8k2ESoZSH1cYbTx9cBydi%2BoDs%2FM6s%3D" rel="nofollow" target="_blank">vue3 语法糖setup 兄弟组件传值</a>(👈点击直达)<br><a href="https://link.segmentfault.com/?enc=y2MTTGUS1j0dkMSjpLPXKQ%3D%3D.OPT105qDiMq9rYtTQ9tvfTSz1TPQu%2F9xY8G9qa9%2BuonCD5rCevvXOyRc6%2Bjki0M7F8UcR5jGkaXQf0YGuOFUS%2FTE91WDerCKU8G21%2F7NkNHEAluReOSm0%2BpWNbZAFeqd5RIdgYVGRCk70VxgZ65uCGjZnlb1cPDgoBrbzBS5lmgGmsdvFDH2KOUHO3Uhi%2FBav2zcj7%2FpeyDomxEApMC7fG0NJOCdOHEc3MG097cccghsm5Gx5o%2F4zDDcH0X9K8eobrAMHX%2FnnWTbFJC6Jyb9vlLQQBlLt1udBNRbQdMjWCdT6IWWAgArMaOjD74qlPl5F8gPEMdAiDLEZdpZWe2XNpRYt%2FJf06oAHTcbGCxcgjUiGFtTTYf5vGWwf8jrcZBJwTkfksbmE2t8HOMWMKXGojuDExYGlDlBkhb1Txg3oQ1PmE1eGbob3YXh7AdPfmq783fyeV3l2LmGhP6SomTllqSNFxk4aw4Kpuba9E9rMoFT2wJax8gyfpAALZbIjDorwY96mGMj4k3FpTNzzYGJD7%2BAyBwwdA4FWqLG8epfv2Exv6y4sRbNExaPOE48UyoyhumBb5evz%2FTINJbErgDA2g2gPVtzp1gUCJifVsND7Ys%3D" rel="nofollow" target="_blank">微信小程序wxs封装使用以及公共js组件封装</a> (👈点击直达)<br><a href="https://link.segmentfault.com/?enc=%2F5kv%2BL74IogwdoFhhSnJBQ%3D%3D.RoGxPFX%2FPUAQZ9k7CaZR61rqE8%2BXKWEskGcAJprSsYUpDrW2yo%2B263Uyq3SteDhxjaklTujop4nkckL3puR9Wl6q9DeHKWz5ErxHeZIwzfGIAtlCb7RAZQGLNPpKWT0gRL11PHlfhK3A0b%2Bndo6APYB%2F9CT76AkCsoWuP6v98RZLIOYiWpswQ47mYzu8IY1CoQVEb67N5MJ4FtgQyEZJMf%2FBLHCSVFwOinO9xNX%2B1%2B0YAnDevoIcHlTPdicP0rmJqIKzS6t15xID2nElMKtOFOAKuz2isXrongkdkB217wsxl0bAN%2BbT%2FSLJCMRLpldf%2BjfG0jwPlxNilVeiXDBVlnWgCXAoNHcoFbSA4KGl3N%2BpSt6M5mF6g9YFM6TE2eOXDTpruJRRyHMxthX3ZTByWXQFim4RlkCIizm2s5YQapLSambtghXXezqx36mpGS8povJypwOyhexi%2FHdfqZAvvSLr7Fe6avsDRgAAAcX8qclUv3V4iw0ILoMLTa6%2BGl4gi2d10zG%2Boih47kQXZSsgLRJi3rtIg%2FAnW%2F5Xsm14W3fdEjxalTfju5Qm1vQ7MVcKDvVBWq8kzoheaMjuX5rMTZD0ARxGgDKuZFb00ju21Mc%3D" rel="nofollow" target="_blank">微信小程序的全局弹窗以及全局实例</a>(👈点击直达)</p><p>如果觉得这篇文章对你有帮助,欢迎点赞👍、收藏💖、转发✨哦~</p>