정골라코딩
[React] Props 와 State 본문
1. Props(Properties)
기본적으로 Component 에 원하는 값을 넘겨줄 때 사용하며 넘겨줄 수 있는 값은 변수, 함수, 객체, 배열 등 JavaScript의 요소라면 제한이 없습니다. 주로 Component 의 '재사용' 을 위하여 사용합니다.
-Props는 읽기 전용입니다.
Props 의 값을 임의로 변경해서 사용하지 마세요. 만약 Props 값을 변경해서 사용하고 싶다면, 새로운 변수를 생성하세요.
-DOM Element 의 Attributes
- 기본적인 DOM Element (div, span 등)들의 Attribute는 camel case 로 작성합니다. 예) tabIndex, className 등
- 그러나 'data-' 또는 'aria-' 로 시작하는 Attribute 는 예외입니다. 예) data-type, aria-label 등
- HTML 의 Attribute 와 다른 이름을 가지는 Attribute 가 있습니다. 예) class-> className, for -> htmlFor 등
- HTML 의 Attribute 와 다른 동작 방식을 가진 Attribute 가 있습니다. 예) checked(defaultChecked) 등
- React에서만 쓰이는 새로운 Attribute 가 있습니다. 예) key, dangerouslySetInnerHTML 등
-HTML 과 다른 방식의 React Attribute (checked, value)
HTML 에서 checked 또는 value 는 해당 값이 '초기값'으로 쓰이지만 React 내에서는 현재 값을 의미합니다.
이 말은 즉, 위 예시처럼 checked 값이 false로 고정돼 있는 경우에 사용자가 checkbox를 클릭하여도 값의 변화가 일어나지 않습니다.
만약 '초기값'의 의미로, checked 또는 value를 사용하고 싶다면 defaultChecked, defaultValue, Attribute 를 설정하세요.
-React에서만 쓰이는 새로운 Attribute(key)
Key는 React가 어떤 항목을 변경, 추가 또는 삭제할지 식별하는 것을 돕습니다.
Key는 엘리먼트에 안정적인 고유성을 부여하기 위해 배열 내부의 Element 에 지정해야 합니다.
Key 는 배열 안에서 형제 사이에서 고유해야 하고 전체 범위에서 고유할 필요는 없습니다.
두 개의 다른 배열을 만들 때 동일한 key를 사용할 수 있습니다.
2. State
State는 Component 내에서 유동적으로 변할 수 있는 값을 저장합니다.
개발자가 의도한 동작에 의해 변할 수도 있고 사용자의 입력에 따라 새로운 값으로 변경될 수도 있습니다.
State 값이 변경되고 재렌더링이 필요한 경우에 React가 자동으로 계산하여 변경된 부분을 렌더링 합니다.
-State 값을 직접 변경하지 마세요.
State 값을 직접 변경하게 되면 React가 Component 를 다시 렌더링할 타이밍을 알아차리지 못합니다.
반드리 setState 함수를 이용해 값을 변경하세요.
setState 함수를 호출할 때 React에게 "다시 렌더링 해주세요~ " 라는 명령이 내려집니다.
-State를 변경하는 두 가지 방법
setState 함수에는 변경할 값을 직접 넣는 방법이 있고, 함수를 넣는 방법이 있습니다.
함수를 넣는 경우 함수가 반환(return) 하는 값으로 State가 변경됩니다.
위 예시처럼 현재 값을 기반으로 State를 변경하고자 하는 경우 함수를 넣는 방법을 권장합니다.
-Object 를 갖는 State를 만들 때 주의사항
예시와 같이 Object를 값으로 갖는 State도 만들 수 있습니다.
그러나 예시의 경우 React가 State의 변경을 감지하지 못합니다!
user object 안의 grade가 변경되었지만 user 자체는 변경되지 않았기 때문입니다.
-Object를 갖는 State를 만들 때 주의사항
왼쪽의 경우 user의 grade가 변경되었지만 user의 내용을 담는 object 자체가 변경된 것은 아닙니다.
오른쪽의 경우 기존 user의 내용을 새로운 object 에 담고 grade를 변경합니다.
-Object를 갖는 State를 만들 때 주의사항
이전 페이지의 설명을 코드로 작성해보면...
'React' 카테고리의 다른 글
[React] Hooks (0) | 2022.11.17 |
---|---|
[React] 이벤트처리 (0) | 2022.11.16 |
[React] 최신 JavaScript 문법 (0) | 2022.11.15 |
[React] JSX 와 컴포넌트 (0) | 2022.11.15 |
[React] 프로젝트 생성해보기 (0) | 2022.11.15 |