React.js Create, Update, Delete
26 Jan 2021 | ReactReact.js Create, Update, Delete
-
중간 정리
-
상위 컴포넌트는 생성자로 state화 시킨다. 하위 컴포넌트에게는 props를 전달하는데 이벤트도 props의 형태로 전달이 가능하다.
- 하위 컴포넌트가 상위 컴포넌트의 state를 변경할 때는 이벤트를 이용한다. (without REDUX)
- 하나의 공통 저장소가 있어서 저장소의 데이터 값이 바뀌면 연관된 컴포넌트가 전부 바뀜. (with REUDX)
-
-
Create 구현
-
control 컴포넌트 추가 후 onChangeMode 이벤트 설치
-
create / update / delete 각 버튼 클릭시 모드 변경
-
mode가 welcome이거나 read 일시에는 본문 내용 출력 (ReadContent 컴포넌트)
-
mode가 create이면 CreateContent 컴포넌트의 내용 출력
-
form 태그에 입력창 세팅 후 onSubmit 이벤트에서 입력창의 값을 인자로 전달
-
상위 컴포넌트에서 인자를 받아서 contents 배열에 추가
-
기존 배열을 건드리는것보다 concat으로 추가한 새 배열을 만드는것이 좋다
shouldComponentUpdate() 메소드의 return 값을 false로 주면 컴포넌트의 값이 바뀌지 않는이상 re-render가 일어나지 않음
shouldComponentUpdate() 메소드는 newProps와 기존의 props 모두 접근이 가능하여 비교가 가능하다.
이것을 활용하여 concat으로 추가한 새 배열로 state를 교체했을시에만 re-render가 일어나게 설정할 수 있는데 원본까지 바꿔버리면 newProps와 this.props가 항상 같으므로 re-render가 일어나지 않는다.
-
setState로 새로운 contents 배열로 re-render
-
-
Update 구현
- UpdateContent 컴포넌트 추가
- Create와 기능면에서 유사하기 때문에 컴포넌트 복붙
- 상위 컴포넌트에서 mode === update이면 사용자가 선택한 TOC의 state(배열)를 하위 컴포넌트에게 props로 넘겨준다
- 하위 컴포넌트에서 선택한 TOC의 title과 desc를 입력창에 출력하는데 props를 그대로 쓰면 error가 발생한다. (props는 read-only이기 때문)
- props를 state화 시키고 쓰는데 반드시 onChange를 정의해주어야함
- state의 이름과 이벤트가 발생한 target의 이름을 같게해서 setState로 [e.target.name] : e.target.value로 입력창에 변경된 state 값 출력
- input type=’hidden’ name=’id’ value={this.state.id} 태그를 하나 더 추가해서 onSubmit 이벤트 발동시 id, 변경된 title, 변경된 desc 값을 넘겨준다
- 상위 컴포넌트의 onSubmit 이벤트 props에서 기존의 contents 배열을 복사한 뒤 반복문을 돌며 하위 컴포넌트에서 넘어온 id와 복사한 배열의 id값이 일치하는 index를 찾아 배열의 title과 desc 값을 수정하여 다시 setState를 해준다.
-
Delete 구현
- contents 배열을 복사한 후 반복문을 돌며 선택한 요소의 id와 배열의 요소의 id가 같은 index를 찾아 splice로 잘라낸다.
- 편집된 contents를 setState로 교체시킨다.