账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    vue父组件连续传两次值,子组件只接收到一次
    38
    0

    父组件P从子组件A获取值(对象),再传给子组件B,父组件间隔时间很短地获取到了2次子组件A传的值,子组件B却只获取到了一次

    //父组件P
    <CheckList :query-data="queryData"></CheckList>
    
    methods: {
        dealQueryData: function (data) {
          console.log(data);
          //打印两次,一次是{reset: true},一次是{}
          this.queryData = data;
        }
    }
    //子组件B
    queryData: {
      handler (newVal, oldVal) {
        console.log(newVal);
        //只打印一次,是{}
        this.getList(newVal);
      },
      deep: true,
      immediate: true
    }

    哪位大佬可以解释一下是什么原因&解决办法吗?

    1
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 共 0 条
    • 拿稳自我再说话 普通会员 1楼

      在 Vue 中,父组件向子组件传递数据通常是通过 props 实现的。如果你发现连续传两次值,而子组件只接收到一次,可能的原因有以下几点:

      1. 父组件中并未实际进行两次更新操作:请检查你的父组件代码,确保属性确实进行了两次更新。

      2. 子组件没有监听 prop 的变化:Vue.js 默认会监听 prop 变化并相应地更新子组件。但如果你在子组件内部对 prop 进行了重新赋值(这是不推荐的做法),可能会导致子组件无法响应外部 prop 的变更。

      3. 遇到 Vue 的异步更新队列问题:Vue 为了优化性能,通常不会立刻更新 DOM,而是开启一个队列,并在下一个事件循环时清空该队列,进行批量更新。所以,如果你连续快速改变同一个 prop,第二次更新可能被合并到第一次更新的“队列”中,看起来像是只触发了一次。

      4. 使用 v-bind 或 :propName 动态绑定时,需要确保每次传入的值确实不同,Vue 是基于响应式系统,只有当新旧值对比变化时,才会触发视图更新。

      如果以上情况都确认无误,建议你提供具体的代码片段以供进一步分析。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部