Vue.js中的任务属性在待办事项列表应用程序中发生了意外变化
P粉966979765
P粉966979765 2023-08-26 12:04:57
[Vue.js讨论组]

我有一个包含状态、变化、获取器等的存储。状态包含以下任务列表。

const state = {
   tasks:[{
     title: "起床",
     completed: false
   },
   {
     title: "项目2",
     completed: false
   },
  ]
}

Todo.vue

<template>
   <Task v-for="(task,key) in tasks" :id="key" :task="task" :key="key" />
</template>
<script>
import { defineComponent } from 'vue';
import Task from '../components/Task.vue'
import {mapGetters} from 'vuex'

export default defineComponent({
  name: 'PageIndex',
  components:{
    Task
  },
  computed:{
    ...mapGetters('task', ['tasks']) //从task模块获取任务
  },
})
</script>

任务.vue

<template>
    <q-item  
        clickable 
        :class="!task.completed ? 'bg-orange-1' : 'bg-green-1'"
        v-ripple>
        <q-item-section side top>
          <q-checkbox v-model="task.completed" />  /////////////// 问题出在这一行
        </q-item-section>

        <q-item-section>
          <q-item-label :class="{'text-strikethrough' : 
          task.completed}">{{task.name}}</q-item-label>
        </q-item-section>
      </q-item>
</template>

<script>
    import {mapActions} from 'vuex'
    export default {
        props: ["task"],
    }
</script>

在上面的代码中,在Task.vue中

<q-checkbox v-model="task.completed" />

问题出在这一行。如果我从上面给出的代码中删除 v-model="task.completed",那么一切都正常工作,否则会抛出错误,错误信息为 Unexpected mutation of "task" prop

P粉966979765
P粉966979765

全部回复(1)
P粉057869348

问题是你试图在mutation之外改变一个prop和相应的vuex状态。将一个值传递给v-model指令将创建一个双向数据绑定。你的task prop引用了状态中的一个对象,当q-checkbox改变task.completed的值时,对象直接在状态中更新。相反,你应该创建一个mutation来更新你的任务:

export const mutations = {
  updateTask(state, payload){
    const task = state.tasks.find(t => t.id === payload.id);

    if(task) Object.assign(task, payload)
  }
}

然后你可以在模板中使用这个mutation

<q-checkbox :value="task.completed" @input="updateTask({id: task.id, completed: !task.completed})" />

还要注意,q-checkbox组件的实际prop和事件名称可能会有所不同,这取决于你的实现方式

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号