본문 바로가기
99% 에러잡기 시리즈/React

[React 99% 에러잡기] Expected an assignment or function call and instead saw an expression no-unused-expressions

by TLOWAC 2020. 3. 30.

 

나는 몰랐다.

이 Error 하나가 나에게 가져올 파장을 말이다.

1시간에 걸친 " ** 이게 왜 안돼지?"의 향연 끝에는 " *발 이래서 TypeScript를 쓰는구나" 라는 생각만이 남게 되었다.

 

더불어, .map() 메서드의 ( ) 소괄호 { } 중괄호 사용의 차이점에 대해서도 이번에 확실히 알게 되었다.

 


Error Log

Line 8:9:  Expected an assignment or function call and instead saw an expression  no-unused-expressions

Search for the keywords to learn more about each error

React Component Code

const todoList = todos.map(({id,text,checked})=>{
        <TodoItem
            id={id}
            text={text}
            checked={checked}
            onToggle={onOffToggle}
            onRemove={onRemove}
            key={id}
        />
    })

Reson Why Error Occurred

에러의 발생 원인은 map() 메서드를 사용할때 주의점과 동일하다.

.map(()=>{ }) 메서드를 중괄호와 같이 사용할때는 { } 중괄호 안에 return이 존재해야 한다.
하지만, React Component Code를 확인해 보면,
.map() 메서드를 사용했음에도 불구하고 return을 사용하지 않았다.

따라서 해당 에러의 해결방법은 아래와 같다.


How Can I Solved ?

  • .map() 메서드에서 { } 중괄호를 사용할때 return 을 사용한다.
  • .map() 메서드를 사용할때 요소를 ( ) 소괄호를 사용해서 묶어준다.

Solution #1

.map(({id,text,checked})=>{return (<TodoItem/>)})

Solution #2

.map(({id,text,checked})=>(<TodoItem/>))

Conclusionally determined solution

최종적으로 선택한 방법은 Solution #2 이다.
Solution #2는 .map() 메서드를 사용할때, 요소를 ( ) 소괄호에 담아서 사용하여 방법이다.

결론적으로 .map() 메서드를 사용하여 반환되는 것은 컴포넌트 하나이기 때문이다.

const todoList=todos.map(({id,text,checked})=>(
        <TodoItem
            id={id}
            text={text}
            checked={checked}
            onToggle={onOffToggle}
            onRemove={onRemove}
            key={id}
        />
    ))

댓글