nodebird 시작 전 리액트에 대한 기초 지식을 알고 가는 것이 좋을 것 같아 리액트 무료강의를 듣기 시작했다. state를 이용해 값도 바꿀 수 있는 것이 신기했다.
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script crossorigin src="https://unpkg.com/react@17/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@17/umd/react-dom.development.js"></script>
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
</head>
<body>
<div id="root"></div>
<!-- react component 정의 -->
<script type="text/babel">
// react 문법으로 작성 시
// const e = React.createElement;
class LikeButton extends React.Component {
constructor(props) {
super(props)
this.state = {
liked: false,
}
};
render() {
return (
// 1. react 문법으로 작성 ()
// e('button', {onClick : ()=>{this.setStats( liked: true )}, type="submit"}, this.state.liked === false : 'Like' ? "Liked");
// 2. JSX (js + xml)
<button type="submit" onClick={() => { this.setState({ liked: true }) }}>{this.state.liked === true ? 'Liked' : 'Like'}</button>
)
};
}
</script>
<!-- react DOM 연결 -->
<script type="text/babel">
ReactDOM.render(<div>
<LikeButton />
<LikeButton />
<LikeButton />
</div>, document.querySelector('#root'));
</script>
</body>
</html>
id=root
인 div가 필요하다.webpack
: 쪼개진 javascript, react 코드를 실행가능한 js파일로 만들어줌babel
: 실험적인 js 문법들을(ex. JSX) 해당 코드 지원 안 하는 브라우저에서도 사용할 수 있게 바꿔 줌state
: 컴포넌트에서 변경 가능한 요소들 (ex. 클릭 시 글자변경)<button>
, react LikeButton
)<>
빈 태그<div>
로 감싸줘야 해서 html 구조 복잡해짐 -> 빈 태그 사용 <> </>
-> 빈 태그 에러 시 <React.Fragment></React.Fragment>
대신 사용하면 html에는 div 표시 안 됨ref={this.onRefInput}
시용input; // this.input 넣을 변수 생성
onRefInput = (c)=>{this.input = c; }
setState()
안에 prevState
를 인자로 받는 함수 구현해주기// 이전 상태값에서 1 더해서 현재 상태로 바꾸기
this.setState((prevState) => {
return {
value : prevState.value + 1
};
});