FrontEnd/Vue3

Vue3 To do list 만들기 (7) props 주의사항

2022. 6. 24. 00:28
반응형

Props는 부모 컴포넌트에서 자식 컴포넌트의 값을 변경해도 괜찮지만, 자식에서 부모의 값을 변경하는것은 하지말라고 한다.

      <input class="CheckInput"
		v-model="todolist.isdone"
         type="checkbox">
         //TodoList.vue

기존의 코드에서 v-model을 통하여 todolist.isdone값의 수정을 하였으나,

todolist[]는 부모컴포넌트인 App.vue에 있다.

 

따라서 v-model 대신 index값을 부모컴포넌트로 전달하여, 부모컴포넌트 안에서 수정을 하려고 한다.

 

<ul class="list-group " 
v-for="(i,index) in todolist" 
v-bind:key="i.id">
<li class="list-group-item d-flex align-items-center mt-2">
  <div class="form-check flex-grow-1">
      <input class="CheckInput"
        :value="todolist.isdone"
        @change="toggleTodo(index)"
        
         type="checkbox">
          <label class="checkLabel"
          :class="{todoStyle:i.isdone}"
          >{{i.sbj}} </label>
  </div>
  <div>
    <button class= "btn btn-danger btn-sm"
    @click="deleteitem(index)">삭제</button>
  </div>
</li>
</ul>
//TodoList.vue (자식)

:value (v-bind:value) 로 todolist.isdone을 지정하여주고

@change(v-on:change)로 체크박스에 변화가 있을떄 toggleTodo함수를 index를 매개변수로 호출한다

    setup(props,context){
      const toggleTodo = (index)=>{
        context.emit('toggle-todo',index);
      };

    return {
            toggleTodo,
           }
    }
    //Todolist.vue Script

setup function에서 ToggleTodo 함수를 선언하고 (index)매개변수를 받는다,

context.emit으로 부모 컴포넌트에게 toggle-todo라는 이벤트명으로 index값을 전달한다.

부모는 이를 수신하기 위하여 v-on:이벤트명을 호출

<TodoList :todolist="todolist" @toggle-todo="toggleTodo" /> 
//app.vue

@toggle-todo로 이벤트를 호출하고 부모컴포넌트에서 toggleTodo 함수를 호출한다.

 

  var toggleTodo=(index)=>{
    todolist.value[index].isdone=!todolist.value[index].isdone
};
//app.vue  Script

toggleTodo를 선언하고 이벤트로 담겨온 index를 매개변수로 사용,

todolist배열의 index번째의 isdone(T/F)값을 Not을 통하여 바꿔준다.

 


 

선생님의 도움을 받아서 자문을 구한결과

기존의 setup 및 emit방식은 구방식이라

 

자식 컴포넌트의 TodoList.vue 수정을 하였다.

<script setup>
import { defineProps, defineEmits } from "vue";

const props = defineProps({
  todolist: {
    type: Array,
    required: true,
  },
});

const emit = defineEmits(["toggle-todo"]);

const toggleTodo = (index) => {
  emit("toggle-todo", index);
};
//props:['todolist']//받아오는 이름 + 위에서 사용하는 이름 props는 return역할을 함께함
</script>

<script setup>

요 setup을 script에 넣어버리고

vue 공식홈페이지 문서

단 emit의 경우 context에 있었기 때문에

import { defineProps, defineEmits } from "vue";

따로 import를 해주어야한다.

 

 


총평 : 진자 진자 강의 들으면서 일단 따라쓰고 복기하는데 너무 어렵다...

더 자세한 설명은 유튜브 코지 코더 Kossie Coder 강의를 수강하면 도움이 될듯..?

 

반응형
저작자표시 비영리 (새창열림)

'FrontEnd > Vue3' 카테고리의 다른 글

Vue3 To do list 만들기 (9) DB연결 및 추가, 삭제 async await 을 곁들인  (0) 2022.06.24
Vue3 To do list 만들기 (8) 검색기능 추가하기  (0) 2022.06.24
Vue3 To do list 만들기 (6) props 부모->자식 데이터 전송  (0) 2022.06.23
Vue3 To do list 만들기 (5) 데이터 emit (자식 컴포넌트 ->부모 컴포넌트)  (0) 2022.06.21
Vue3 컴포넌트 만들기  (0) 2022.06.21
'FrontEnd/Vue3' 카테고리의 다른 글
  • Vue3 To do list 만들기 (9) DB연결 및 추가, 삭제 async await 을 곁들인
  • Vue3 To do list 만들기 (8) 검색기능 추가하기
  • Vue3 To do list 만들기 (6) props 부모->자식 데이터 전송
  • Vue3 To do list 만들기 (5) 데이터 emit (자식 컴포넌트 ->부모 컴포넌트)
빡상이
빡상이
게임 및 개발 관련 일지 작성하는 블로그
빡상이
끄적끄적
빡상이
반응형
  • 분류 전체보기
    • FrontEnd
      • Vue3
      • Nuxt
    • BackEnd
      • 로스트아크 Work
    • 백준(알고리즘)
    • Unreal Engine
    • 아크라시아 세카이
    • C++
    • 웹 개발 꿀팁
    • C#
    • Linux
      • 명령어
    • DB
      • SQL
      • Tibero
전체
오늘
어제

최근 댓글

최근 글

hELLO · Designed By 정상우.
빡상이
Vue3 To do list 만들기 (7) props 주의사항
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.