laravel - VUE中的道具变异警告
问题描述
我收到了一个 vue 警告(由于我的代码无法正常工作,最终导致我出错),上面写着:
[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: "editmode"
有了它,在这里尝试了建议,但无法使其发挥作用。下面是我的作品:
props:{
editmode:{
type: Boolean,
default: false,
}
},
methods:{
toggleM(){
var editmode = this.editmode;
editmode = !editmode;
this.editmode = editmode;
if(editmode == false){
//dothis
}else{
//dothat
}
},
}
模板
<template>
<div class="ui-table-container-body">
<div class="ui-table" v-if="Boolean(items.length) || Boolean(Object.keys(items).length)" v-cloak>
<ui-table-body ref="body" v-model="items"
:editmode="editmode"
>
</ui-table-body>
</div>
</div>
</template>
这条线this.editmode = editmode;
是我控制台中指向的那条线,有什么办法可以超越它吗?
解决方案
您必须使用data
变量作为您的prop
.
在您的组件中,代码代码应如下所示:
props:{
editmode:{
type: Boolean,
default: false,
}
},
data: {
dataEditMode = false
},
watch: {
'editmode': {
handler: 'onEditmodeChanged',
immediate: true,
},
'dataEditMode': {
handler: 'onDataEditModeChanged'
}
},
methods:{
toggleM(){
var editmode = this.dataEditMode;
editmode = !editmode;
this.dataEditMode = editmode;
if(editmode == false){
//dothis
}else{
//dothat
}
},
onEditmodeChanged (newVal) {
this.dataEditMode = newVal
},
onDataEditModeChanged (newVal) {
this.$emit('editmodeChanged', newVal)
}
}
并且在您的父组件中包含此组件应如下所示:
<my-component-name :editmode="editmode" @editmodeChanged="(e) => { editmode = e }"></my-component-name>
推荐阅读
- python - 如何将列表组合并转换为一个数据框?
- c# - 我正在尝试使用正则表达式捕获字符串。以下是我试图从中提取数据的文本文件示例
- javascript - 每当状态在本机反应中发生变化时,有没有办法将视图的背景颜色更改为 1 秒?
- r - 如果 column value == "character(0)" 从另一列取值
- python - 如何使用 Python 对每个流的 Wireshark TCP 数据包进行分组
- docker - 在启动时保留 docker 实例状态,并且不会丢失之前会话的工作
- jinja2 - Jinja2 if/else 对用户定义的变量
- scala - 在 spark scala 中使用 caseclass 与 structtype
- javascript - React 中的测试事件冒泡
- github - 如何通过 ssh 将 docker-compose 解决方案从 github 自动部署到 vps?