-Routing기능과 class component를 사용해 바닐라 자바스크립트로 구현했던 인스타그램 페이지를 리액트로 바꿨다.
-src
폴더 바깥에 Routes.js
만들어 index.js
에서 첫번째 인자로 가져온다.
-<Routes />
컴포넌트에서 Login
컴포넌트와 Main
컴포넌트의 경로를 /
,/main
으로 설정한다.
<Login />
컴포넌트-input에 onChange
이벤트를 적용해 입력할 때마다 id와 password의 state를 입력한 값(e.target.value
)으로 변경한다.
-버튼의 원래 컬러(originalColor
)와 활성화 됐을 때의 컬러(activeColor
)를 btnStyle
객체로 만들고 조건문을 사용해 backgroundColor
를 바꾼다.
<Main />
컴포넌트-<Nav />
, <Feed />
, <Mainright />
컴포넌트로 나눈다.
<Nav />
컴포넌트검색 기능
-click
의 state값을 false
로 초기화한다.
-임의로 만든 검색리스트(searchlist
) state를 배열
로 초기화하고 검색하는 단어는 word:""
로 초기화한다.
-clickHandler : onClick
이벤트를 이용해 검색창을 클릭했을때 click
의 state값이 true
가 되도록한다.
-changeHandler : onChange
이벤트를 사용해 input창에 입력한 값(e.target.value
)으로 word
의 state를 변경한다.
render()
-click
이 true
일 때 돋보기 아이콘(className ="i")의 left
속성을 10px주고 검색창(input)은 change
라는 class를 추가한다.
-searchlist
를 filter
를 사용해 변경된 word
state값을 포함하는 것만 배열로 리턴해 변수matchedWords
에 저장한다.
-matchedWords
를 map
를 이용해 화면에 표시한다.
<Feed />
컴포넌트댓글 기능
-입력하는 comment를 ""
으로, 화면에 표시되는 comments를 []
으로 초기화한다.
-changeHandler : 댓글창(input)에 입력하면 입력한 값(e.target.value
)을 comment
state값으로 변경한다.
-enter, clickHandler : enter를 치거나 게시 버튼을 클릭하면 입력한 comment(this.state.comment
)를 빈배열 comments
에 concat
을 이용해 넣고 이를 setState한다. 그리고 입력한 댓글창이 초기화되도록 comment는 ""
으로 setState한다.
-removeHandler : 삭제 버튼을 클릭하면 comments
중 삭제 버튼이 클릭된 comment(e.target.previousElementSlibing.innerText
)를 제외한 나머지를 filter
하고 이를 setState 한다.
render()
-comments
를 map
을 이용해 화면에 표시되도록 한다.
push
원래의 배열을 변화시킨다. /concat
원래의 배열은 그대로 두고 새로운 배열을 리턴한다.
댓글을 추가할때push
를 사용하면 원래의comments
배열을 바꾸기 때문에 새로운 배열을 리턴하는concat
을 사용해 state를 변경해야한다.
처음에는map
,filter
의 사용이 익숙치않고 비동기의 특성을 가지는setState
때문에 사용하는 위치가 헷갈렸다. 하지만 반복적인 사용으로 많이 익숙해졌다.