نکات vue - بخش 1
update value in child component#
هرگاه بخواهیم یک مقداری را از کامپوننت والد به فرزند بدهیم و در کامپوننت فرزند بخواهیم آن را آپدیت کنیم و کامپوننت والد از این تغییرات مطلع شود، باید به صورت زیر عمل کنیم:
<template>
    <SingleTodo
    :addTodo="addTodo"
    :title="title"
    @update:title="title = $event"
    :date="date"
    @update:date="date = $event"/>
</template>
<script>
    import { ref } from "@vue/reactivity";
    import { onMounted } from "@vue/runtime-core";
    import axios from "axios";
    import SingleTodo from "@/components/SingleTodo.vue";
    export default {
        name: "Todos",
        components: {
            SingleTodo,
        },
        setup() {
            const todos = ref([]);
            const title = ref("");
            const date = ref("");
            const status = ref("active");
            onMounted(async () => {
            //* get data
            try {
                const { data } = await axios.get("http://localhost:3000/todos");
            todos.value = data;
            } catch (e) {
                console.log(e);
            }
        });
        //* add new todo
        const addTodo = async () => {
        try {
        const { data } = await axios.post("http://localhost:3000/todos", {
        id: Math.random() * 99999999,
        title: title.value,
        date: date.value,
        status: status.value,
    });
        todos.value = [...todos.value, data];
        title.value = "";
        date.value = "";
        } catch (e) {
            console.log(e);
        }
    };
        return {
            todos,
            addTodo,
            title,
            date,
        };
    },
    };
</script>
حال در کامپوننت فرزند به صورت زیر عمل می کنیم:
<template>
    <form @submit.prevent="addTodo">
        <div class="new-todo">
            <button>
                <span class="circle"></span>
            </button>
            <input type="text" placeholder="Create a new todo..."
            :value="title"
            @input="$emit('update:title', $event.target.value)" />
            <input type="date" class="ml-auto"
            :value="date"
            @input="$emit('update:date', $event.target.value)" />
        </div>
    </form>
</template>
<script>
    export default {
        name: "SingleTodo",
        props: ["addTodo", "title", "date"],
        emits: ["update:title", "update:date"],
        setup() {}
    };
</script>