gpt4 book ai didi

vue.js - Vue 关闭组件返回避免直接改变 prop

转载 作者:搜寻专家 更新时间:2023-10-30 22:12:51 24 4
gpt4 key购买 nike

我有一个要在不同页面上使用的组件。好吧,它在第一次切换之前运行良好。它像以前一样显示,但是当我单击“关闭”按钮时,它关闭了,但控制台输出:

[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: "visible"

found in

---> at src/components/Snackbar.vue at src/views/Login.vue

然后它不会在点击时显示

有什么办法可以解决这个问题吗?

Snackbar.vue

<template>
<v-snackbar v-model.sync="visible" :timeout="5000" bottom>
{{ content }}
<v-btn flat color="primary" @click.native="visible = false">Close</v-btn>
</v-snackbar>
</template>

<script>
export default {
name: 'snackbar',
props: [
'visible',
'content'
]
}
</script>

登录.vue

<template>
<div class="login">
<Snackbar :visible="snackbar.visible" :content="snackbar.content"></Snackbar>
</div>
</template>

<script>
import Snackbar from '@/components/Snackbar.vue'
export default {
components: {
Snackbar
},
data: function() {
return {
email: '',
password: '',
snackbar: {
visible: false,
content: ''
}
}
},
methods: {
login: function() {
if (this.email != '' && this.password != '') {
// Do something
} else {
this.snackbar.content = 'Fields can\'t be empty';
this.snackbar.visible = true;
}
}
}
}
</script>

最佳答案

控制台错误由此触发:

@click.native="visible = false"

该组件直接改变传入的 Prop 。如果你想在父组件控制可见性的地方保持这种控制级别,你必须通过让点击事件发出一个事件来做到这一点,父组件接收并设置 this.snackbar.visible = false 从而触发 prop 更改并且子组件被隐藏。

<Snackbar :visible="snackbar.visible" :content="snackbar.content" 
v-on:requestClose="close"></Snackbar>

<v-btn flat color="primary" @click.native="$emit('requestClose')">Close</v-btn>



methods: {
close: function() {
this.snackbar.visible = false;
}
}

关于vue.js - Vue 关闭组件返回避免直接改变 prop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50890394/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com