Vue项目中props传值时子组件检测不到的问题及解决

 更新时间:2022年08月12日 10:21:00   作者:我不是安徒生  
这篇文章主要介绍了Vue项目中props传值时子组件检测不到的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

props传值时子组件检测不到

我们在Vue项目开发的过程中,经常会需要在父子组件传值,我们都知道,父子组件传值的时候是通过 props 来进行的,但是在父组件的数据动态改变的时候,子组件却接收不到最新变化的数据,这个时候怎么办呢?

首先,传值不能用驼峰命名法,因为vue语法中规定HTML 中的特性名是大小写不敏感的,所以浏览器会把所有大写字符解释为小写字符,我们需要使用短线分隔符,例如:good-id 这样。

然后,我们可以将数据的改变用JSON.parse(JSON.stringify(data))进行转化,但是官网上又更加直接的方法,那就是对于props接收过来的数据用watch进行监听,并且,如果你想初始化的时候就进行监听,可以给监听的属性上加一个 immediate:true

例如:

props: {
    personalname: {
      type: String
    }
  },
watch: {
    personalname(newValue, oldValue) {
      if (newValue !== oldValue) {
        this.fetch(); //这里里面放你代码的逻辑
      }
    },
    mmediate: true,
  },

当然,你如果想深层次的监听(如:对象,,数组等引用类型值时)可以在加一个 deep:true

ok,快去试试吧!

props用法和传值问题

props的基本用法是父组件给子组件传输数据和验证

基本用法

1.在父组件中的data中定义值

2.在子组件中使用props声明要引用哪个值

3.父组件的template中要在子组件标签上绑定

4.在template模板中,要使用中划线写法;在script脚本中使用小驼峰

props的使用

1.静态props

静态即传入的值不变化,直接在父组件中定义,子组件中使用

2.动态props

动态即传入的值会变化,父组件中要动态地绑定父组件的数据。

3.props验证

验证传入的props参数的数据规格,如果不符合数据规格则发出警告,注意这个数据类型包含所有的数据类型,如基本类型和引用类型;

还可以在验证中加入自定义验证函数,当返回false时则发出警告

单向数据流:props是单向绑定的

一般来说,当父组件的属性变化时,将传导给子组件,但是反过来不会。每次父组件更新时,子组件的所有 prop 都会更新为最新值。

但是,这只是限于静态或者动态时子组件中没有定义局部变量去接收的情况,如果说子组件中定义了局部变量去接收,那么父组件中的值更新时子组件是接收不到的,即子组件只能接收初始值(不管是在data中定义还是computed计算属性定义)

第二点,但是基本数据类型时,子组件接收了父组件中的数据再进行修改,父组件中的数据是不受影响的,也就是props的单向数据流;但是如果是对象数组这种引用类型数据的话,子组件中修改,父组件也会跟着变化的(当然,父组件中修改子组件也会变化),原因就是它们共用一个内存地址,相当于浅拷贝!

解决方案:在子组件中对数据进行局部变量接收后再进行深拷贝!!然后用拷贝完后的数据! 看下面,一变全变

总结一下props传值的注意点

1.若是子组件定义局部变量去接收,则不接受父组件数据更新,即只能接收初始值

2.基本数据类型修改,子组件不会影响父组件,但是若是引用数据类型数组对象的话,两者相互影响,共用同一个内存地址,相当于浅拷贝

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • el-table表头全选框隐藏或禁用设置方法

    el-table表头全选框隐藏或禁用设置方法

    有时候我们使用el-table的选择框时,如果涉及修改、删除时,可能一次只允许用户选择一条,这样的话如果使用顶部的全选复选框就不合适了,这篇文章主要给大家介绍了关于el-table表头全选框隐藏或禁用设置的相关资料,需要的朋友可以参考下
    2023-09-09
  • Vue 2.X的状态管理vuex记录详解

    Vue 2.X的状态管理vuex记录详解

    这篇文章主要介绍了Vue 2.X的状态管理vuex记录的相关资料,文中介绍的非常详细,对大家的理解和学习具有一定的参考价值,需要的朋友们下面来一起看看吧。
    2017-03-03
  • Vue实现移动端日历的示例代码

    Vue实现移动端日历的示例代码

    工作中遇到一个需求是根据日历查看某一天/某一周/某一月的睡眠报告,但是找了好多日历组件都不是很符合需求,只好自己手写一个日历组件,顺便记录一下,希望对大家有所帮助
    2023-04-04
  • Vue中props的使用详解

    Vue中props的使用详解

    props属性是父子组件之间的通信桥梁。这篇文章主要介绍了Vue中props的使用,需要的朋友可以参考下
    2018-06-06
  • Vue实现兄弟组件间的联动效果

    Vue实现兄弟组件间的联动效果

    这篇文章主要介绍了Vue实现兄弟组件间的联动效果,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-01-01
  • vue实现的封装全局filter并统一管理操作示例

    vue实现的封装全局filter并统一管理操作示例

    这篇文章主要介绍了vue实现的封装全局filter并统一管理操作,结合实例形式详细分析了vue封装全局filter及相关使用技巧,需要的朋友可以参考下
    2020-02-02
  • Vue3全局配置axios的两种方式总结

    Vue3全局配置axios的两种方式总结

    在实际项目开发中,几乎每个组件中都会用到 axios 发起数据请求,下面这篇文章主要给大家总结介绍了关于Vue3全局配置axios的两种方式,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-01-01
  • Vue中localStorage的用法和监听localStorage值的变化

    Vue中localStorage的用法和监听localStorage值的变化

    这篇文章主要介绍了Vue中localStorage的用法和监听localStorage值的变化,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-04-04
  • Vue中使用装饰器的方法详解

    Vue中使用装饰器的方法详解

    装饰器是一种与类相关的语法糖,用来包装或者修改类或者类的方法的行为,其实装饰器就是设计模式中装饰者模式的一种实现方式,下面这篇文章主要给大家介绍了关于Vue中使用装饰器的相关资料,需要的朋友可以参考下
    2022-01-01
  • 前端实现pdf预览功能的全过程(基于vue)

    前端实现pdf预览功能的全过程(基于vue)

    这篇文章主要给大家介绍了关于前端实现pdf预览功能的相关资料,前端实现预览最好的效果还是PDF,不会出现一些文字错乱和乱码的问题,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-09-09

最新评论