classMouseextendsReact.Component{ render() { return<div> <div style={{border: '1px solid red'}} onMouseOverCapture={((event)=>{ console.log('mouse over on capture event') console.dir(event, this)}).bind(this)} onMouseOver={((event)=>{ console.log('mouse over on bubbling event') console.dir(event, this)}).bind(this)} > Open DevTools and move your mouse cursor over here </div> </div> } }
6.1.2 React이벤트 살펴보기
6.1.3 React 합성 이벤트 객체 다루기
1 2 3 4 5 6 7 8 9 10 11 12 13
classMouseextendsReact.Component{ render() { return<div> <div style={{border: '1px solid red'}} onMouseOver={((event)=>{ console.log('mouse is over with event') console.dir(event)}).bind(this)} > Open DevTools and move your mouse cursor over here </div> </div> } }
자바스크립트 코드 사이에 <>가 있으면 처음에는 어색하지만. React.createBlement(NAME, …) 대신 을 사용하는것이 훨씬 직관적이고 편리하다. JSX를 사용하려면 브라우저에서 실행하기 전에 컴파일 또는 트랜스파일 과정을 거쳐 일반적 자바스크립트 파일로 변환해야한다.
컴포넌트를 작송할때, 약간의 코드로 자체적으로 뷰를 변경할 수 있는 코드를 만들기. ex) 현재 시간/날짜를 사용하기 JSX없이 React만 사용하면 +를 이용해 연결하거느 ‘와 ${varName}로 표시한 문자열 탬플릿을 사용할 수 있다. (템플릿 리터럴)
1 2 3 4 5 6
classDateTimeNowextendsReact.Component{ render(){ let dateTimeNow = newDate().toLocaleDateString() return<span> Hello {this.props.userName}, current date and time is {dateTimeNow}.</span> } }
//방법1 변수 render(){ let link if(this.props.user.session){ link = <ahref="/logout"> Logout</a> else link = <ahref="/login"> Login</a> return<div>{link}</div> } }
// 방법 2 표현식 render(){ let link = (sessionFlag) => { if(sessionFlag){ return<ahref="/logout"> Logout</a> else return<ahref="/login"> Login</a> } return<div>{link(this.props.user.session})}</div> }
클릭 할때마다 o,x 번갈아 나오게 하고, 승자를 가리기 위해 9개 블럭의 상태를 동시에 확인해야함. 여러 하위 컴포넌트로 부터 데이터를 모으거나, 하위 컴포넌트들이 서로 통신하기 원하면 상위컴포넌트로 state를 이동시킴. 상위 컴포컨트는 props를 통해 하위 컴포넌트로 state를 전달해 줄 수 있다.