inno 19
Sparta coding
Innovation Camp
w3 day19
복기: compo : 첫uppercase
folder : 전체 lowercase
semicolon 미사용 - 근거 ref
VSCode : Shft + Alt + click = 여러줄
create-react-app 사용시 console.log 2번씩
- strictMode issue / 진욱님: 없애도 됨
react manager 정주혜님
- styled component 질문 / 해결
- 통째로 넘길 때 key를 풀지말고 …rest로 뭉쳐서 한번에 넘긴다
manifest.json 파일은?
- pwa : app처럼 쓸 수 있게하는
- 또는모킹?을 할 때 필요한 파일
- 실무에서 쓰이나?
- 성능이나용량에 큰 영향ㄴ 남겨두는편
- 놔두는 걸 추천
App.js에 compo를 arrow대신 function 이유?
- react에서 compo를 만들때는 차이없음
- 대신 App compo도 arrow로 통일
- this binding? 사용시 arrow, function이 다름
- 가독성이 떨어져서 function을 쓰는경우 있음
- export할때 default 안되는경우가 있는데 function은 export default function~한번에 가능
- default는 한page에서 한번만 그래서 page를 구성하는 compo는 default로 export함
index.js에서 App감쌀 때 브라우저 router / 프로바이더
- 브라우저 router는 가장 바깥에 있어야 함
- 프로바이더는 compo 밖에만 있으면 됨
- 프로바이더 = compo의 상태를 공급 그래서 compo 밖에서 감싸주는 형태가 보기 좋음
reportWebVital 지워도?
- program 성능 확인용. 놔둬라
- test file은 ㄴ 상관
test code 할 때 쓰는 것들 취업 전/후?
- 신입은 잘 몰라도 될 것 같다
- backend한테는 중요해
- 뭐 알아서 나쁠건 없긴 해
id값을 Date.now로 줬다(밀리세컨-중복x)
- 같은 값을 안바뀌고 계속 가지고 가는 것 같다
- onClick 할 때 id를 생성하는걸로 바꿀?
- 동시에 누르면 어떻게? > 그럴 수 없을 듯
redux , 컨텍스트 차이?
- main역할은 같다
- compo에 전역으로 state를 넣음
- 컨텍스트 api는 관리하기 힘듦, 지저분함
- 둘다 쓰긴 함
- 컨텍스트를 기반으로 만들어진듯(지현님)
탑다운? : 위에서부터 아래로 보는 시선
진행하다가 모르는게 있을때 강의/구글
과제노션 8/19 21:00
아직 배우는 단계
주특기 2주차일뿐
불안 ㄴㄴ
코드공유 / feedback 받기
현업개발자처럼 코드짜기 - 노필요
자기만의 코드를 짜고 짠 이유를 말할기회
8/21 WIL 제출
8/25 주특기 개인/팀과제 제출
team repo Q1
notion shorter link
done
Q1
done in Notion
LifeCoding 5 Props
App > Header
Header에 parameter로 props
- return하는 Html에 원하는 값 { }
Q1 compo의 부모자식 구분x
- 부모로부터 자식이 받아오잖아?
-
그럼 App에 있는 값을 Header가 받음
inno 16 맞음 - App이라는 부모compo가 자식compo들을 받아서 구성중인 듯 - 자식compo가 각자 생김새를 정의하고(function) 마지막에 부모가 전체적 view를 잡아주는? - 부모compo에 큰 틀을 짜고 있고 그 틀안에 넘겨야할 정보들도 다 가지고 있는 상태 - 자식compo는 그 정보를 받고 정보를 바탕으로 자신의 형태+내포하는정보를 보여줄 모습을 return함 부모compo=큰틀view + 세세한data 자식compo=자신의view + 실행할code 실행했을 때 보여지는 data는 props로 받음
- 자식compo의 function parameter로 props넣고
-
자식compo에 부모compo로 부터 받을부분을 { props.인자 }로 지정
-
{ }안의 내용은 string이 아니라 표현식이므로 해석해서 반영해줌
function Header(props) { console.log(props); return ( <header> <h1> {props.title} </h1> </header> ); } function App() { return ( <div> <Header title="React"></Header> <Nav></Nav> <Article title="Welcome" body="Hello, React"></Article> </div> ); }
-
미쳤다 이해 쏙쏙됨
단순한 문자열이 아니라 list를 전달할 땐?
- 전달 할 정보를 배열로 구성
- App에서 props로 전달할 때 { }를 사용
-
console찍어보기
- 변수 lis를 배열로 설정하고 []
- for문으로 index를 가져오고
- for문 안에 변수t = props.topics[i]
- 받은 t에 t.title 을 list형태로
- 변수 lis에 push
<a>
tag를 씌워서 링크로 변경<a>
tag 안에 href=adress 넣기- adress로 동적으로 작동, 때문에 { }사용
warning : Each child in a list should have a unique “key” prop.
- <li>에 key prop을 줘라, 그리고 그 값은
반복문 안에서 unique해야함
- <li key={t.id}>
- 자동으로 생성한 tag는
react가 추적 할 수 있어야 하고
추적할 때 근거가 있어야함
그 근거로써 key라고 하는 약속된prop을 부여
그럼으로써 react는 성능up, 정확하게 동작
LifeCoding 6 Event
header를 클릭했을때 event를 일으키고싶다
-
부모App의 header에 onChangeMode라는
함수를 넣고- 이 함수에는 발생시킬event인
alert(‘header’); 가 포함되어있음
- 이 함수에는 발생시킬event인
- header compo안
<a>
tag에 onClick={}을 사용
onClick을 했을 때 function을 실행 -
이떄 function의 parameter로 event 객체를넣기
page가 reload하기않기위해
event.perventDefault();React에서는 false를 반환해도 기본 동작을 방지할 수 없음 반드시 preventDefault를 명시적으로 호출해야 함
- function > arrow 함수로 바꾸면 보기좋음
Nav list를 onClick했을 때 id값을 alert하고싶음
- 그대로 쭉 진행
- 자식compo onChangeMode함수에 id값을
받아오는 방법은 다양하지만 <a>
태그안에 id={t.id} 삽입- 그리고 event객체의
- event를 발생시키는 target
-
그리고 id값
function Nav(props) { console.log(props); const lis = []; for (let i = 0; i < props.topics.length; i++) { let t = props.topics[i]; lis.push( <li key={t.id}> <a id={t.id} href={"/read/" + t.id} onClick={function (event) { event.preventDefault(); props.onChangeMode(event.target.id); }} > {t.title} </a> </li> ); } return ( <nav> <ol>{lis}</ol> </nav> ); } function App() { const topics = [ { id: 1, title: "html", body: "html is..." }, { id: 2, title: "css", body: "css is..." }, { id: 3, title: "js", body: "js is..." }, ]; return ( <div> <Header title="WEB" onChangeMode={function () { alert("Header"); }} ></Header> <Nav topics={topics} onChangeMode={function (id) { alert(id); }} ></Nav> <Article title="Welcome" body="Hello, React"></Article> </div> ); }
LifeCoding 7 State
prop / state가 변경되면 새로운 return값으로 변경되고 UI를 바꿈
- prop : compo를 사용하는 외부자를 위한 data
- state : compo를 만드는 내부자를 위한 data
Application의 논리를 구성해보자
- const mode 를 App안에 선언하고
- let content 선언 / 초기값 설정
- if mode가 WELCOME 일 때
<Article~ welcome>
을 return - if mode가 READ일 때
<Article~ read>
를 return
- if mode가 WELCOME 일 때
- Article이 들어갈 위치에 변수{content} 삽입