如何解决子组件不能修改父组件传来的值的需求 报错报错Avoid mutating a prop directly since the value will be overwritten wheneve

本文主要是介绍如何解决子组件不能修改父组件传来的值的需求 报错报错Avoid mutating a prop directly since the value will be overwritten wheneve,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 前言
  • 一、官方文档:
  • 二·、具体的解决方法实现:
  • 总结


前言

报错Avoid mutating a prop directly since the value will be overwritten whenever the parent component re-renders. Instead, use a data or computed property based on the prop’s value. Prop being mutated: “status” 父组件通过props传值给子组件,如何解决因为在子组件改变props传来的值导致的报错呢?

一、官方文档:

在vue关于props的文档中,父子组件中的数据流是单向的,为什么是单向的呢,其实这是比较合理的,要是双向的话,当我们某个子组件对父组件的值进行了操作,就会导致这个父组件下的所有子组件的值都发生改变,所以文档中给出了下面子组件操作数据时的解决方法。
在这里插入图片描述

二·、具体的解决方法实现:

从组件信息的单向流动,我们知道报错的原因了,但是我们在使用中确实需要对这个父组件传来的值进行更改的话,需要如何实现呢?

  • 第一步:在子组件中接收到父组件的值
  props: {searchKey: {type: String,default: null},stateCategory: {type: String,default: null}},
  • 第二步:在子组件中创建新的局部变量,并且把从父组件获取到的值赋给新的变量
  data(){return {searchWord: this.searchKey,stateCategoryValue: this.stateCategory,},
  • 第三步:创建监听,只要父组件传来的值发生变更就重新赋值给子组件的局部变量,同时创建子组件和父组件的联系,用来把子组件更新的值同步到父组件
  watch: {searchKey(value) {this.searchWord = value;},searchWord(value) {this.$emit('update:searchKey', value);},stateCategory(value) {this.stateCategoryValue = value;},stateCategoryValue(value) {this.$emit('update:stateCategory', value);}},
  • 第四步:到这里就大功告成了,我们可以使用我们创建的局部变量,同时保证我们需要的效果
<el-inputv-model="searchWord"v-trim="searchWord"/><el-selectv-model="stateCategoryValue"v-trim="stateCategoryValue"/>

这里补充一点:

要是我们的值是对象的话,就不能直接赋值了,需要用到深拷贝来获取到,众所周知,对象的话赋值只是把在栈里面的引用地址赋值给它,实际数据是存在堆内存的。


总结

vue的论坛里有讨论过这个问题,一些别的解决方法可以去了解一下,下次有空,我也会尝试使用别的方法来实现效果。但是我们记住一句话:永远不要在子组件中修改父组件的数据!!

这篇关于如何解决子组件不能修改父组件传来的值的需求 报错报错Avoid mutating a prop directly since the value will be overwritten wheneve的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/198236

相关文章

Vue和React受控组件的区别小结

《Vue和React受控组件的区别小结》本文主要介绍了Vue和React受控组件的区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录背景React 的实现vue3 的实现写法一:直接修改事件参数写法二:通过ref引用 DOMVu

504 Gateway Timeout网关超时的根源及完美解决方法

《504GatewayTimeout网关超时的根源及完美解决方法》在日常开发和运维过程中,504GatewayTimeout错误是常见的网络问题之一,尤其是在使用反向代理(如Nginx)或... 目录引言为什么会出现 504 错误?1. 探索 504 Gateway Timeout 错误的根源 1.1 后端

解决升级JDK报错:module java.base does not“opens java.lang.reflect“to unnamed module问题

《解决升级JDK报错:modulejava.basedoesnot“opensjava.lang.reflect“tounnamedmodule问题》SpringBoot启动错误源于Jav... 目录问题描述原因分析解决方案总结问题描述启动sprintboot时报以下错误原因分析编程异js常是由Ja

深度剖析SpringBoot日志性能提升的原因与解决

《深度剖析SpringBoot日志性能提升的原因与解决》日志记录本该是辅助工具,却为何成了性能瓶颈,SpringBoot如何用代码彻底破解日志导致的高延迟问题,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言第一章:日志性能陷阱的底层原理1.1 日志级别的“双刃剑”效应1.2 同步日志的“吞吐量杀手”

MySQL 表空却 ibd 文件过大的问题及解决方法

《MySQL表空却ibd文件过大的问题及解决方法》本文给大家介绍MySQL表空却ibd文件过大的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录一、问题背景:表空却 “吃满” 磁盘的怪事二、问题复现:一步步编程还原异常场景1. 准备测试源表与数据

解决Nginx启动报错Job for nginx.service failed because the control process exited with error code问题

《解决Nginx启动报错Jobfornginx.servicefailedbecausethecontrolprocessexitedwitherrorcode问题》Nginx启... 目录一、报错如下二、解决原因三、解决方式总结一、报错如下Job for nginx.service failed bec

SysMain服务可以关吗? 解决SysMain服务导致的高CPU使用率问题

《SysMain服务可以关吗?解决SysMain服务导致的高CPU使用率问题》SysMain服务是超级预读取,该服务会记录您打开应用程序的模式,并预先将它们加载到内存中以节省时间,但它可能占用大量... 在使用电脑的过程中,CPU使用率居高不下是许多用户都遇到过的问题,其中名为SysMain的服务往往是罪魁

MySQ中出现幻读问题的解决过程

《MySQ中出现幻读问题的解决过程》文章解析MySQLInnoDB通过MVCC与间隙锁机制在可重复读隔离级别下解决幻读,确保事务一致性,同时指出性能影响及乐观锁等替代方案,帮助开发者优化数据库应用... 目录一、幻读的准确定义与核心特征幻读 vs 不可重复读二、mysql隔离级别深度解析各隔离级别的实现差异

Java报错:org.springframework.beans.factory.BeanCreationException的五种解决方法

《Java报错:org.springframework.beans.factory.BeanCreationException的五种解决方法》本文解析Spring框架中BeanCreationExce... 目录引言一、问题描述1.1 报错示例假设我们有一个简单的Java类,代表一个用户信息的实体类:然后,

MySQL磁盘空间不足问题解决

《MySQL磁盘空间不足问题解决》本文介绍查看空间使用情况的方式,以及各种空间问题的原因和解决方案,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录查看空间使用情况Binlog日志文件占用过多表上的索引太多导致空间不足大字段导致空间不足表空间碎片太多导致空间不足临时表空间