inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Svelte.js 입문 가이드

6. Todo 예제 만들기

화살표 함수 관련 질문입니다.

해결된 질문

348

리응

작성한 질문수 1

2

안녕하세요. 너무나 훌륭한 강의 잘 봤습니다. 어쩜 그렇게 잘 가르쳐주시는지, 수업 듣는 내내 '참 대단하시다!' 싶었고.. 그만큼 배울 게 많아서 참 좋았습니다. 감사합니다. ^^

마지막 수업까지 보고 나서 저도 Todo 예제를 만들어봤는데요. 역시나 수업을 볼 땐 워낙 설명을 잘해주셔서 따박따박 수긍이 가는 바람에 충분히 이해가 됐다고 생각했는데, 막상 혼자 코딩을 하다보니 여기저기서 막히더군요 ^^;; (수긍이 되는 것과 제대로 이해하는 것이 다르다는 걸 새삼 깨닫게 됐습니다 ^^;;)

수업에서 작성해주신 코드를 무작정 copy하기보다, 알려주신 내용을 최대한 기억해내면서 나름대로 이해한 내용대로 코드를 작성해보니, 정확히 어떤 걸 잘 모르고 있는지 제대로 파악이 돼서 좋았구요. 그렇게 시행착오 겪고 나서 수업을 다시 반복해서 보니 좀더 확실히 이해되는 것 같습니다.

근데 화살표 함수 관련해서 시행착오가 좀 있었는데요;;

deleteTodo() 함수 내용 $todos = $todos.filter(t => t.id !== todo.id)를 $todos = $todos.filter(t => {t.id !== todo.id}) 이렇게 해놓으면 항목 하나 삭제 시도할 때 리스트 전체가 사라지는 현상이 있더라구요;; 

제가 화살표 함수 구문에 대한 이해가 부족해서 그런 것같은데;; t => t.id !== todo.id 에서 t.id !== todo.id에 중괄호만 하면 boolean 값 return을 명시적으로 안해서 $todos.filter() 결과가 null이 되고, 중괄호를 안해야 boolean값들이 제대로 return 되기 때문에 그런 게 맞나요?

input 태그에선 on:keydown={e => {e.key === 'Enter' && updateTodo()}} 이렇게 하나 on:keydown={(e) => e.key === 'Enter' && updateTodo()} 이렇게 하나 동일하게 동작하길래, 중괄호를 하든 안하든 상관없다고 착각했는데, input 태그에선 updateTodo() 함수를 호출하는 게 목적이라 return 여부와 상관없이 정상적으로 동작한 것같은데, 제가 이해한 게 맞는지 답변 부탁드립니다. ^^;;

화살표함수 svelte 중괄호

답변 1

0

HEROPY

마인드큐 님 안녕하세요.
제 강의를 좋게 봐주셔서 정말 감사합니다.

t.id  !==  todo.id 의 비교 연산자를 통해 true/false를 filter 메소드의 콜백에서 반환해야 그 값으로 필터링 된 새로운 배열을 만들 수 있습니다.
화살표 함수가 조금 헷갈리시면 일반 함수로 변경해서 작성하시거나 이해하시면 좋습니다.
현재 질문하신 함수를 일반 함수로 다음과 같이 표현할 수 있습니다.

(1)
$todos = $todos.filter(t => t.id !== todo.id)
// 위 코드를 다음으로 수정할 수 있습니다.
$todos = $todos.filter(function ( ) {
    return t.id !== todo.id
})

(2)
$todos = $todos.filter(t => {t.id !== todo.id})
// 위 코드를 다음으로 수정할 수 있습니다.
// return 키워드를 사용하지 않는 부분을 확인하세요!
$todos = $todos.filter(function ( ) {
    t.id !== todo.id
})

위 (2) 코드의 경우는 반환 값이 무조건 undefined(Falsy)이기 때문에 filter 메소드로 걸러낼 수 있는 부분이 없게 됩니다.

그리고 추가로 질문하신 input 태그에서의 함수는 반환 값에 영향을 받는 로직이 아니기 때문에 아래 (1)과 (2) 코드 모두 동일하게 동작합니다.
일반 함수로는 다음과 같이 표현할 수 있습니다.

(1)
on:keydown={(e) => e.key === 'Enter' && updateTodo()}
// 위 코드를 다음으로 수정할 수 있습니다.
on:keydown={function (e) {
    return e.key === 'Enter' && updateTodo( )
}}

(2)
on:keydown={e => {e.key === 'Enter' && updateTodo( )}}
// 위 코드를 다음으로 수정할 수 있습니다.
// return 키워드를 사용하지 않는 부분을 확인하세요!
on:keydown={function (e) {
    e.key === 'Enter' && updateTodo( )
}}

0

리응

화살표 함수를 일반 함수로 변경해서 표현해주시니 이제 확실히 알겠네요. 댓글에서도 엄청 자세하고 친절하게 설명해주셔서 이해가 쏙쏙 됩니다. 정말 감사합니다. ^^

프로젝트 실행이 되지 않아 menu API 테스트가 불가합니다 ㅠ

0

134

9

프론트 api.js의 요청 headers 옵션의 cors 관련 설정 질문

0

61

2

모듈 버전이 안맞아서 발생하는 문제 같습니다;;;

0

188

2

meteor 버전 때문에 실행이 안됩니다.

0

161

2

graghQL의 transaction 처리속도가 궁금합니다.

0

112

2

질문있습니다.

0

107

2

화면 구성 설명용 도구 이름

0

158

1

Meteor 실행 오류 문의 드립니다.

0

184

1

영호 좋아요 버튼이 콘솔에는 잘 찍히지만 화면에 렌더링 되지 않습니다.

0

129

2

영화목록 component 만들기 에서 질문이 있습니다.

0

209

3

"hello".toUpperCase() 가 안되는데요.

0

148

1

div에 on:click 이벤트 붙일 때 on:key와 관련된 이벤트를 같이 사용해야하나요?

1

907

1

cdn지원과 프론트엔드 프레임워크는 무슨 상관관계가 있나요?

1

785

1

안녕하세요

1

492

1

todo 예제에서 스토어를 사용하실때 따로 stores.js 를 사용하지 않고 바로 App.svelte에서 스토어 객체를 생성하신 이유가 있나요

1

365

1

다른 라이브러리와 통합 또는 외부 라이브러리를 svelte로 불러오는 법.

1

1133

1

스벨트 + 백엔드는 어떻한 형태로 구성을 많이 하나요?

1

1790

1

스토어객체를 왜 굳이 props로 쓰는건가용

3

326

1

props 기본값이 true인가요?

1

288

1

혹시 에코시스템에 대한 질문을 해도 괜찮을까요?

2

300

1

bind 와 on:input, value 의 차이점에 대해 질문드립니다.

2

548

1

설치가 자꾸 실패해요ㅠㅠ

1

694

2

강의감사합니다

3

237

1

Windows 사용자는 npx 명령어 전 'git'을 설치하셔야 합니다.

3

758

1