아래와 같이 전달된 매개 변수에 객체 구조 분해 할당으로 시도 했을 때 렌더링은 문제없이 됐으나 이상하게 key 값이 고유하지 않다는 오류 메시지가 떴습니다. (다른 속성들은 문제 없이 순환하여 렌더링 되었습니다.)
key 문제를 해결하기 위해 콜백함수 내부에 const를 사용해서 구조 분해 할당을 시도 했으나 이번엔 문법 오류로 아예 렌더링 되지 않았습니다.
위와 같이 map()의 콜백 함수에서 구조 분해 할당을 하고 id 속성을 순환하기 위해서 어떻게 해야하나요?
A.13
만약 map() 구조 분해 할당을 한다면 아래와 같이 콜백 함수 안에 const로 구조 분해 할당한 변수를 선언하고 return 키워드를 사용해서 반환할 React 요소를 입력해야한다.
map() 메서드는 return 키워드를 생략해도 값을 반환한다.
map()의 콜백 함수의 첫번째 매개 변수를 구조 분해 할 변수로 입력한다면 아래와 같이 해당 매개변수는 lecturer의 객체를 구조 분해 할당 했다는 것을 명시 해야한다.
12. 클래스 컴포넌트
클래스 컴포넌트는 왜 props에 바로 접근할 수 없나요?
A.12
클래스 컴포넌트는 생성된 인스턴스의 속성에 바로 접근할 수 없다. 그렇기 때문에 인스턴스를 참조하고 있는 this에 먼저 접근해서 this의 속성(prop)에 접근해야 한다. 즉, 클래스 컴포넌트에서 props에 접근할 때는 this.props로 접근한다.
11. constructor의 기능
constructor()의 기능이 생성자 함수를 만드는 기능을 하는 건가요?
A.11
constructor()은 생성자 함수를 만든다. 생성자는 클래스 생성시 단 한번만 실행된다. 또한 반드시 생성자 함수 안에는 super()가 있어야한다 .
10. 오류 노트
아래의 오류가 어떤 오류를 말하는 건가요?
A.10
이미지의 상단에 대문짝만 하게 적혀 있다. "Cannot read property 'name' of undefined" name이라는 속성을 읽을 수 없다는 것이다. 즉, props.use.name이 없다는 것이다.
9. 전달 속성
아래의 표시한 구문은 객체의 속성 값을 복사 하는 것인가요?
A.9
props.rating 데이터를 rating이라는 임의의 속성에 담아 RatingStars 컴포넌트에 전달하는 것이다. 그렇기 때문에 RatingStars는 이제 props.rating를 가진 rating이라는 속성을 갇게 된다.
8. props가 가리키는 데이터 ?
마지막의 this.props가 가리키는 데이터가 무엇인가요?
또한 DeliveryComment = (props) => {}구문에서 props 매개변수가 받는 데이터가 어떤 데이터를 가리키는지 모르겠습니다.
A. 8
props는 해당 컴포넌트가 전달받은 데이터를 인자로 받는 매개변수이다. 그렇게 때문에 props.name, props.rating 키워드로 데이터에 접근이 가능한 것이다.
컴포넌트에서 해당 props에 전달받은 데이터가 무엇인지 확인하는 방법
클래스 컴포넌트에서 아래와 같이 constructor()을 사용해서 확인이 가능하다.
함수형 컴포넌트에서는 .....?
7. {}란 무엇인가요?
아래의 코드에서 {props.image}에서 {}는 무엇인가요?
A.7
ES6의 템플릿 리터럴과 유사한 방식으로 사용되는 JSX의 속성 보간법이다.
React에서는 템플릿 엔진을 사용하지 않고 싱글 컬리 브레이스({}, Curly Brackets)를 사용한다. 반면, Vue, Angular는 템플릿 엔진을 사용하며 더블 컬리 브레이스({{}})를 사용한다. (참고로 앵글 브레이스는 각괄호(<>, angle brace)이다. )
ES6는 정식 명칭은 아니다. 정식 명칭은 ECMAScript2015이다. 하지만 관례적으로 ES6로 줄여서 사용하고 있다.
그럼 모던 자바스크립트로 명칭하는 것은 어떤가? 이 부분에도 문제가 있다. 어느시기부터 어디까지가 모던 자바스크립트으로 칭할지 정해진 부분이 없으니 약간 애매한 부분이다.
6. Mac 단축키 사용
codepen에서는 단축키가 적용되지 않습니다. 어떻게 사용하나요? (예를들어 cmd + D 같은 것)
A.6
현재 VScode에서 사용하고 있는 단축키는 VScode에 기본 설정된 단축키가 아니다. 사용자 정의로 설정된 단축키이다. 기본 설정된 단축키는 상단 메뉴바에서 확인 가능하다.
VScode 상단의 메뉴바에서 단축키 확인이 가능하다.
5. 런타임 환경이란?
A.5
런타임 환경(영어: runtime environment)은 컴퓨터가 실행되는 동안 프로세스나 프로그램을 위한 소프트웨어 서비스를 제공하는 가상 머신의 상태이다.
흔히 Node.js 런타임 환경이라고 한다.
4. prettier 세미콜론 사용
prettier의 세미콜론 제거 설정을 변경하고 싶은데 설정이 되지 않습니다. 어떻게 해야하나요?
{this.props.instructor.map((lecturer) => {
// return 전에 구조 분해 할당
const { id, image, module, name } = lecturer
// return 시, React 요소 괄호로 묶어주기
return (
<Lecture key={id} lecturer={lecturer}>
<figure className="lecturer-info">
<img src={image} alt="" className="lecturer-photo" />
<figcaption>
{module} 모듈을 담당 할 {name} 강사 Facebook 바로가기
</figcaption>
</figure>
</Lecture>
)
}}
// map()은 값을 반환하는 메서드이기 때문에 return을 생략해도 값을 반환한다.
// 아래의 두 개의 표현식은 같은 것을 의미한다.
{this.props.instructor.map((lecturer) => () }
{this.props.instructor.map((lecturer) => return () }