【Vue】报错:Avoid mutating a prop directly since the value will be overwritten whenever the parent

2023-05-16

当我们直接改变父组件的 props 值是会报以下警告:

[Vue warn]: 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: “facomment”

会报错的原因是由于 Vue 的单项数据流

怎样理解 Vue 的单项数据流?

  • 数据总是从父组件传到子组件,子组件没有权利修改父组件传过来的数据,只能请求父组件对原始数据进行修改。这样会防止从子组件意外改变父组件的状态,从而导致你的应用的数据流向难以理解。
  • 注意: 在子组件直接用 v-model 绑定父组件传过来的 props 这样是不规范的写法,开发环境会报警告。
  • 如果实在要改变父组件的 props 值可以再data里面定义一个变量,并用 prop 的值初始化它,之后用$emit 通知父组件去修改。

解决方案:

父组件:

<template>
  <div>
     <BlogComment :facomment="comment" @recordsChange="recordsChange"/>
  </div>
</template>

<script>
export default {
  name: "BlogDetail",
  components: {
      BlogComment
  },
  data(){
  	return {
  		comment: {},
  	}
  },

  methods: {
  	recordsChange(records) {
        this.comment = records; //在父组件修改值
    },
  }
};
</script>

子组件:

<template>
  <div>
    <div class="pagination-box" v-if="facomment.records != null">
          <el-pagination
            background
            layout="prev, pager, next"
            :current-page="facomment.current"
            :page-size="facomment.size"
            :total="facomment.total"
            @current-change="page1"
          >
          </el-pagination>
    </div>
  </div>
</template>

<script>
export default {
  name: "",
  props: ["facomment"],

  methods: {
  	// 分页
    page1(page) {
      this.$axios
        .get("/comment/list", {
          params: {
            blogId: this.blogId,
            page: page,
            pageSize: this.pageSize,
          },
        })
        .then((res) => {
          // this.facomment = res.data.data (不能直接修改)
          this.$emit("recordsChange", res.data.data); // 用 $emit 通知父组件去修改
        });
    },
   
  }
};
</script>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Vue】报错:Avoid mutating a prop directly since the value will be overwritten whenever the parent 的相关文章

  • 字符串赋值指针变量与普通变量的区别

    普通变量和指针变量用字符串赋值时是有区别的 特别是数组与字符串 xff0c 数组名本质上是数组的首地址 在对指针 数组 xff08 名 xff09 用字符串同样如此 xff0c 赋值时同样为首地址 对于普通变量 xff0c 赋值操作实际上是

随机推荐

  • C语言中 井号#、双井号##

    在 C 语言中 xff0c 井号 34 34 是一个预处理器指令的符号 xff0c 用于在编译之前处理代码 预处理器指令以 34 34 开始 xff0c 以换行符结束 常见的预处理器指令包括 xff1a include xff1a 包含一个
  • C++中的双冒号::

    在C 43 43 中 xff0c 双冒号 xff08 xff09 被用作作用域解析运算符 类作用域解析运算符 在C 43 43 中 xff0c 如果要在类的定义外部定义或实现成员函数或静态成员变量 xff0c 则必须使用双冒号运算符来引用类
  • c++中::和.区别

    在C 43 43 中 xff0c 34 34 和 34 34 都是用于访问类的成员 xff08 包括成员函数和成员变量 xff09 的运算符 xff0c 但它们有一些重要的区别 34 34 被称为作用域解析运算符 xff0c 用于访问全局作
  • Widget::Widget(QWidget *parent)为什么要传入父级指针?

    Widget Widget QWidget parent QWidget parent 列表初始化语法来初始化基类QWidget的构造函数 ui new Ui Widget 初始化指向Ui Widget类对象的指针ui 在类的声明里定义Ui
  • 拷贝构造函数为什么要传入引用

    拷贝构造函数是用于创建一个新对象并将其初始化为另一个对象的副本的特殊构造函数 在拷贝构造函数中 xff0c 如果我们将参数作为值传递 xff0c 那么会发生对象复制 xff0c 这将导致无限递归的调用 xff0c 因为拷贝构造函数的调用需要
  • 使用vscode开发apicloud

    1 第一步 xff1a VScode安装apicloud插件 xff1b 2 第二步 xff1a 配置apicloud插件里面工作区的Apicloud Subdirectories路径 路径是 xff1a VUE目录 src 3 第三步 x
  • 构造函数的调用规则

    在面向对象编程中 xff0c 构造函数是用于创建对象的特殊函数 构造函数的调用规则如下 xff1a 当创建一个对象时 xff0c 会自动调用该对象的构造函数 构造函数的名称必须与类的名称相同 构造函数可以有多个重载版本 xff0c 但是必须
  • 深拷贝与浅拷贝

    深拷贝和浅拷贝是指在计算机编程中 xff0c 当需要复制一个对象时 xff0c 复制出来的副本与原对象之间的关系的不同 浅拷贝是指在复制对象时 xff0c 只复制了对象本身的值 xff0c 而没有复制对象包含的子对象 也就是说 xff0c
  • C++三种继承方式的区别

    访问方式分为两种 xff0c 一种是类内访问 xff0c 还有一种是类外访问 xff1b 所谓类内访问 xff0c 就是类内的函数中是使用了属性 xff1b 类外访问 xff0c 就是新建一个实例对象 xff0c 并访问这个对象的属性 xf
  • python爬虫之数据解析(BeautifulSoup)

    BeautifulSoup也是python爬虫常用的一种数据解析方法 xff0c 主要就两步 1 实例化一个Beautifulsoup对象 xff0c 平且将页面源码数据加载到该对象中 2 通过调用Beautifulsoup对象中相关的属性
  • 蓝桥杯嵌入式第十四届省赛题目解析

    前几天刚刚参加完第十四届的省赛 xff0c 这届题目比我想象中的要难 xff0c 其实想一想这也是应该的 xff0c 以前的知识点都被摸透了 xff0c 也是需要加入新的知识点了 xff0c 但是我还是想说能不能别在我参加的时候加大题目难度
  • dockerfile构建

    2 简答题 编写Dockerfile制作镜像 xff0c 生成镜像名为my build Nginx2 首先创建目录dockerfile nginx2 xff0c 保存Dockerfile文件 具体要求如下 xff1a 1 基于镜像cento
  • 安装虚拟机之后怎么配置虚拟环境、深度学习、深度强化学习环境安装

    安装步骤目录 一 配置虚拟机VMware安装包 amp Ubuntu的光盘映像文件 xff1a VMware安装Ubuntu安装 二 进入虚拟机配置环境深度 xff08 强化 xff09 学习环境的配置1 得知系统所自带python版本 x
  • 力扣-刷题方法总结(测试文章)

    知乎方面收集到的资料 xff08 非原创 xff0c 题主只是对其进行统一的整理 xff0c 方便后续查看 xff09 算法训练讲究循序渐进 xff1a 1 先从简单开始 xff0c 然后过度到中等 xff0c 再过渡到困难的进程 2 如何
  • 文件分隔符 ‘/‘(斜杠) 和 ‘\‘(反斜杠) 的使用

    前言 在学习时 xff0c 总会用到 Windows 和 Linux xff0c 输入路径时 xff0c 文件路径分隔符有时用 xff08 斜杠 xff09 xff0c 有时用 xff08 反斜杠 xff09 xff0c 属实不好区分 xf
  • VMware虚拟机安装Win11教程(解决常见报错)

    前言 今天闲来无事 xff0c 就想着装一下最新版的win11玩一下 xff0c 然后来来去去还是折腾了一些时间 xff0c 有遇到一些错误不过最好都找到了解决办法 xff0c 下面我就分享一下VMware虚拟机安装win11的详细步骤 V
  • vue打包后neditor不显示了

    原因是vue和vue template compiler 1 两者的版本不一致 xff1b 2 两者的版本低了 xff1b 例如 xff1a 我出问题的版本是 34 vue 34 34 2 5 10 34 34 vue template c
  • 【Docker常用命令】

    Docker常用命令 xff08 学习笔记 xff09 一 Docker基础命令二 Docker镜像命令三 Docker容器命令3 1 运行容器3 2 退出容器3 3 查看容器进程 xff0c 日志3 4 再次进入容器3 5 容器启停3 6
  • OpenCV学习——ArUco模块

    前提介绍 xff1a ArUco模块是OpenCV的contrib拓展库中一个模块 xff0c 需要安装OpenCV的 contrib拓展库 才能正常使用 ArUco标记 xff1a ArUco 标记是由 宽黑色边框 和 确定其标识符 xf
  • 【Vue】报错:Avoid mutating a prop directly since the value will be overwritten whenever the parent

    当我们直接改变父组件的 props 值是会报以下警告 xff1a Vue warn Avoid mutating a prop directly since the value will be overwritten whenever th