uniapp中,当页面显示时触发子组件的重新渲染

  1. 使用watch监听数据变化
    在子组件中使用watch来监听父组件传递的数据,一旦数据发生变化,子组件就会重新渲染。

    子组件代码示例:

    <template>
      <div>{{ message }}</div>
    </template>
    
    <script>
    export default {
      props: {
        message: {
          type: String,
          default: ''
        }
      },
      watch: {
        message(newVal) {
          // 当父组件传递的message发生变化时,子组件重新渲染
          this.$forceUpdate();
        }
      }
    }
    </script>
    
  2. 使用$emit$on
    在父组件中改变数据后,通过$emit触发一个事件,然后在子组件中使用$on监听这个事件,并在事件处理函数中调用$forceUpdate()来强制子组件重新渲染。

    父组件代码示例:

    <template>
      <child :message="message" @update="updateChild" />
    </template>
    
    <script>
    import Child from '@/components/Child.vue';
    
    export default {
      components: {
        Child
      },
      data() {
        return {
          message: 'Hello'
        };
      },
      methods: {
        updateChild() {
          this.message = 'World'; // 改变数据触发子组件重新渲染
        }
      }
    }
    </script>
    

    子组件代码示例:

    <template>
      <div>{{ message }}</div>
    </template>
    
    <script>
    export default {
      props: {
        message: {
          type: String,
          default: ''
        }
      },
      mounted() {
        this.$root.$on('update', this.update);
      },
      methods: {
        update() {
          this.$forceUpdate(); // 强制重新渲染
        }
      },
      beforeDestroy() {
        this.$root.$off('update', this.update);
      }
    }
    </script>
    
  3. 使用v-ifv-show
    通过切换子组件的v-ifv-show条件,可以实现子组件的重新渲染。这种方法比较简单,但可能会导致组件频繁地销毁和重建。

    父组件代码示例:

    <template>
      <child :message="message" v-if="showChild" @update="toggleChild" />
    </template>
    
    <script>
    import Child from '@/components/Child.vue';
    
    export default {
      components: {
        Child
      },
      data() {
        return {
          message: 'Hello',
          showChild: true
        };
      },
      methods: {
        toggleChild() {
          this.showChild = !this.showChild; // 切换显示状态以重新渲染子组件
        }
      }
    }
    </script>
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

温暖前端

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值