티스토리 뷰
전체적인 Logic
- 데이터 입력
- PhoneForm 에서 이름, 전화번호를 입력받아 App 으로 전달
- App 에서 배열형태로 데이터를 추가하여 상태값으로 저장
- 화면에 출력
- App 에서 PhoneInfoList 호출 (번호목록 state를 props로 전달)
- PhoneInfoList에서 전달받은 목록을 JSX(요소마다 PhoneInfo 호출)로 변환하여 출력
함수형 컴포넌트의 state 변경 시 replace되는 이슈
전개연산자
공식 문서 발최
클래스 컴포넌트의 setState 메서드와는 다르게, useState는 갱신 객체(update objects)를 자동으로 합치지는 않습니다. 함수 업데이터 폼을 객체 전개 연산자와 결합함으로써 이 동작을 복제할 수 있습니다.
setState((prevState) => {
// Object.assign would also work
return { ...prevState, ...updatedValues };
});
다른 방법으로는 useReducer가 있는데 이는 여러개의 하윗값들을 포함한 state 객체를 관리하는 데에 더 적합합니다.
Computed property names
'[]' 를 이용해 객체의 속성명에 구문을 넣을 수 있다.
예)
setData({
...data,
[e.target.name]: e.target.value,
});
input 컴포넌트의 값을 state에 담기
function handleChange(e) {
setData({
...data, // 전개연산자
[e.target.name]: e.target.value,
});
}
이벤트 핸들러 함수를 호출하면 이벤트가 발생한 컴포넌트가 event.target 속성으로 넘어온다.
부모 컴포넌트에게 정보 전달하기
부모 컴포넌트에서 메소드를 만들고, 이 메소드를 자식에게 props로 전달한 다음에 자식 내부에서 호출하는 방식을 사용한다..
- 부모 컴포넌트
function handleCreate(data) {
setInfo([...info, { id: info[info.length - 1].id + 1, ...data }]);
// console.log(data);
}
메소드 선언
return (
<div>
<PhoneForm onCreate={handleCreate} />
<PhoneInfoList data={info} />
</div>
);
자식 컴포넌트에게 onCreate라는 이름의 props로 메소드를 전달
- 자식 컴포넌트
function handleSubmit(e) {
e.preventDefault();
props.onCreate(data); // *
setData({ name: "", phone: "" });
}
발생한 이벤트를 처리할 정보를 부모 컴포넌트의 메소드를 실행함으로써 넘겨준다.
e.preventDefault()
원래 이벤트가 해야하는 작업을 방지한다.
ex) submit 버튼을 누를 시 새로고침 되는 것
key
const list = data.map((info) => <PhoneInfo key={info.id} info={info} />);
배열을 array.map()을 통해 JSX로 변환할 때에는 컴포넌트에 key라는 속성을 넣어줘야 함. (key 정보를 통해 DOM에서 렌더링할 요소를 정한다.(성능향상))
이 때 key의 값은 고유값이어야 한다. ex) DB 테이블의 primary key값
'Develop > React' 카테고리의 다른 글
3일차) React Hook API (0) | 2020.06.09 |
---|---|
2일차) props와 state (0) | 2020.06.05 |
1일차) CRA를 통한 프로젝트 생성, 간단한 JSX 문법 (0) | 2020.06.03 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- 삼항연산자
- Command
- nodejs
- Database
- function
- npm
- javascript
- pm2
- blog
- ES6
- 논리연산자
- daemon
- ignore
- sql
- react hook
- Object
- props
- code-block
- syntax-highlight
- react
- useEffect
- OOP
- useState
- file system
- highlight-js
- SQL JOIN
- mark-down
- State
- reactjs
- terminal
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함