hero 리팩토링

수정페이지는 등록페이지와 보기페이지를 합한 역할이다. 최초에 hero 정보를 가져온 후에 등록페이지 UI에 바인딩하면된다. 기존 Hero.js 파일은 Detail View 역할이므로 Hero.js 파일을 View.js로 리네임 리팩토링한다.

그리고, Hero.js 컴포넌트를 다시 만든다. 이 Hero.js가 하는 역할은 view와 edit 컴포넌트를 모드에 따라서 보여주는 역할을 한다. is_edit 변수가 false 이면 detail view 컴포넌트를 true이면 edit 컴포넌트를 보여준다.

View 컴포넌트에는 id 속성으로 넘겨준다. 이제 View 컴포넌트는 uri 파라메터를 변수로 받을 수 없으므로 부모인 Hero에서 넘겨줘야 한다. View에서는 id로 받는 부분을 수정한다.

Edit 컴포넌트 추가

수정하는 컴포넌트인 Edit 컴포넌트를 추가한다. Edit 컴포넌트는 데이터를 가져오는 Detail View 와 등록하는 컴포넌트인 Register 컴포넌트가 결합된 형태이다. 그러므로 먼저 Register 컴포넌트를 복사해서 pages/hero 폴더에 Edit.js로 복사한다. 그리고, Detail View 컴포넌트에서 데이터를 가져오는 부분을 추가한다. 데이터를 가져오게 되면 sex, power 부분을 수정해야 한다. sex에는 male or female 의 스트링 타입 데이터가 들어가 있는데 이것을 객체로 전환해야 하고 마찬가지로 power에도 콤마로 분리된 스트링 데이터를 객체로 전환해야 한다.

데이터를 가져와서 바인딩을 하게 되면 그 다음부터는 Register 컴포넌트와 거의 동일하다. 마지막에 submit 시 post가 아니고 put 메서드만 달라지는것을 제외하고,,, REST api는 다음과 같다.

  • api: /api/admin/hero
  • method: PUT
  • content-type: json
  • request data: 서버에서는 id를 키로해서 다른 필드들에 대한 update가 수행된다. 그러므로 id는 필수키로 해서 변경이 필요한 필드를 추가로 전송해야 한다.