Vue警告避免避免修改道具“ taskToEdit”

时间:2020-09-04 10:12:02

标签: javascript laravel vue.js

我的道具editToTask出现问题:

app.js:42491 [Vue警告]:避免直接更改prop,因为每当父组件重新渲染时,该值就会被覆盖。而是使用基于属性值的数据或计算属性。道具被突变:“ taskToEdit”

组件TaskComponent.vue

<template>
...
        <button
          type="button"
          class="btn btn-secondary"
          data-toggle="modal"
          data-target="#editModal"
          @click="getTask(task.id)"
        >Editer</button>
      </li>
      <edit-task v-bind:taskToEdit="taskToEdit"></edit-task>
...
</template>

<script>
export default {
  data() {
    return {
      tasks: {},
      taskToEdit: "",
    };
  },

  methods: {

    getTask(id) {
      axios
        .get("http://localhost:3000/tasks/edit/" + id)
        .then((res) => (this.taskToEdit = res.name))
        .catch((error) => console.log(error));
    },
};
</script>

组件EditTaskComponent:

<template>
...
            <form>
              <div class="form-group">
                <label for>Nom des tâches</label>
                <textarea name="name" id="name" rows="4" class="form-control" v-model="taskToEdit"></textarea>
              </div>
            </form>
...
</template>

<script>
export default {
  props: ["taskToEdit"],
};
</script>

1 个答案:

答案 0 :(得分:1)

您的问题可以轻松解决,不应该更改道具。 v-model很好地解决了这个问题,您应该研究component v-model

首先,您可以使子组件与v模型一起使用,在子组件中使用名为value的prop代替。代表任务值。

<script>
export default {
  props: ["value"],
};
</script>

其次,避免使用v模型来改变道具。而是发出一个输入事件。

<textarea name="name" id="name" rows="4" class="form-control" :value="value" @input="$emit('input', $event.target.value)"></textarea>

现在您可以在父组件中使用v-model。

<edit-task v-model="taskToEdit"></edit-task>