解决vue3报错:Unexpected mutation of “xxx“ prop.(eslintvue/no-mutating-props)

 更新时间:2023年12月15日 11:40:50   作者:jieyucx  
这篇文章主要给大家介绍了关于如何解决vue3报错:Unexpected mutation of “xxx“ prop.(eslintvue/no-mutating-props)的相关资料,文中通过代码将解决办法介绍的非常详细,需要的朋友可以参考下

eslint校验报这个错,其实是Vue的单向数据流的概念,因为识别到子组件中修改了props值。

我这里踩到这个坑是这么操作的,我在父组件中给子组件传了个值,然后再子组件中v-modle这个值,于是就给我报了这个错!

复现场景如下:

父组件中

<enter-school ref="enterSchoolRef" :student-info="selectRows" />

子组件中

<template>
    <el-form ref="formRef" class="enterForm" inline :model="form" :rules="rules" @submit.prevent>
      <el-input
          v-model="studentInfo[0].name"
          clearable
          placeholder="请输入姓名"
        />
     </el-form>
</template>
<script>
    props: {
      studentInfo: {
        type: Array, //类型
        default: null //默认值
      },
    },
</script>

报错就在v-model="studentInfo[0].name"不应该在子组件中直接双向绑定父组件传递过来的值

解决方案:

  • 计算属性 依赖该props进行计算/转换
<template>
 <el-input
      v-model="studentName"
      clearable
      placeholder="请输入姓名"
 />
</template>
<script>
    import { computed } from 'vue'
    props: {
      studentInfo: {
        type: Array, //类型
        default: null //默认值
      },
    }
    setup(props) {
      const studentName = computed(() =>
        props.studentInfo &&
        props.studentInfo.length > 0 ? props.studentInfo[0].name : null
      )
      return {
          studentName 
     }
    }
</scirpt>
  • 定义中间变量 在子组件内的定义一个变量,并将接收的props当作其初始值:
<template>
 <el-input
      v-model="studentName"
      clearable
      placeholder="请输入姓名"
 />
</template>
<script>
    import { computed, defineComponent, reactive, toRefs } from 'vue'
    props: {
      studentInfo: {
        type: Array, //类型
        default: null //默认值
      },
     }
    export default defineComponent({
    setup(props) {
      const state = reactive({
        studentName : props.studentInfo[0].name
      })
      return {
          ...toRefs(state),
     }
    }
   })
</scirpt>

我就是用的方案1,搞个计算属性解决了

总结

到此这篇关于解决vue3报错:Unexpected mutation of “xxx“ prop.(eslintvue/no-mutating-props)的文章就介绍到这了,更多相关Unexpected mutation of “xxx“ prop内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue使用element-ui tabs切换echarts解决宽度100%方式

    vue使用element-ui tabs切换echarts解决宽度100%方式

    这篇文章主要介绍了vue使用element-ui tabs切换echarts解决宽度100%方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • vue项目接口访问地址设置方式

    vue项目接口访问地址设置方式

    这篇文章主要介绍了vue项目接口访问地址设置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • 讲解vue-router之什么是嵌套路由

    讲解vue-router之什么是嵌套路由

    这篇文章主要介绍了讲解vue-router之什么是嵌套路由,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • 使用vue-infinite-scroll实现无限滚动效果

    使用vue-infinite-scroll实现无限滚动效果

    vue-infinite-scroll插件可以无限滚动实现加载更多,其作用是是当滚动条滚动到距离底部的指定高度时触发某个方法。这篇文章主要介绍了用vue-infinite-scroll实现无限滚动效果,需要的朋友可以参考下
    2018-06-06
  • Vue.js的模板语法详解

    Vue.js的模板语法详解

    Vue.js 的核心是一个允许你采用简洁的模板语法来声明式的将数据渲染进 DOM 的系统。这篇文章重点给大家介绍Vue.js的模板语法,感兴趣的朋友跟随小编一起看看吧
    2020-02-02
  • Vue Axios异步与数据类型转换问题浅析

    Vue Axios异步与数据类型转换问题浅析

    总的来说这并不是一道难题,那为什么要拿出这道题介绍?拿出这道题真正想要传达的是解题的思路,以及不断优化探寻最优解的过程。希望通过这道题能给你带来一种解题优化的思路,Axios是一个开源的可以用在浏览器端和Node JS的异步通信框架,主要作用就是实现AJAX异步通信
    2023-01-01
  • vue父元素点击事件与子元素点击事件冲突问题

    vue父元素点击事件与子元素点击事件冲突问题

    这篇文章主要介绍了vue父元素点击事件与子元素点击事件冲突问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • vant-ui组件库中如何修改NavBar导航栏的样式

    vant-ui组件库中如何修改NavBar导航栏的样式

    这篇文章主要介绍了vant-ui组件库中如何修改NavBar导航栏的样式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • Vue框架下引入ActiveX控件的问题解决

    Vue框架下引入ActiveX控件的问题解决

    这篇文章主要介绍了Vue框架下引入ActiveX控件的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • vue中监听scroll事件失效的问题及解决

    vue中监听scroll事件失效的问题及解决

    这篇文章主要介绍了vue中监听scroll事件失效的问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09

最新评论