개인 공부를 위해 작성했습니다
3주차부터는 React를 배우게 되는데 HTML, CSS, JS에 겨우 익숙(?) 아니지.. 아직 익숙할 정도는 아니지,😂ㅠ
해졌다 싶은데 어려울 것만 같은 React를 배우게 되어 예습 겸 공부했던 내용을 정리해본다.
const hi = <p>Hi</p>;
.js
파일에 JSX 문법이 있으면 브라우저는 해석하지 못해 문법 오류가 난다. 이때 바벨을 통해 브라우저가 해석할 수 있도록 컴파일 과정이 필요하다const hi = <p>Hi</p>;
const myFavorite = {
food: <li>샐러드</li>,
animal: <li>dog</li>,
hobby: <li>programming</li>
};
const hi = <p>Hi</p>;
const myFavorite = {
food: <li>샐러드</li>,
animal: <li>dog</li>,
hobby: <li className="list-item">programming</li>
};
<input>
과 같이 하나의 태그가 요소인 경우에는 <input />
와 같이 항상 /
으로 끝내줘야 한다<div />
와 <div></div>
는 같은 표현1. (필수) 소괄호로 감싸기
const good = (
<> //Fragments
<p>hi</p>
<p>안녕!</p>
</>
);
2. (필수) Fragments
항상 하나의 태그로 시작
ReactDOM.render
함수를 사용ReactDOM.render(
<h1>Hello, world!</h1>,
document.getElementById('root')
);
component(컴포넌트)란 재사용 가능한 UI 단위
input
을 받아서 return
할 수 있다. class형
과 function형
이 있다function Welcome(props) {
return <h1>Hello, {props.name}</h1>;
}
React.Component
를 extend해서 생성render()
메서드는 무조건 정의해야하고, return
도 해주어야 한다render()
메서드는 무조건 정의해야한다는 말은, component를 만들 때 필요한 메서드가 원래 더 있다는 뜻. 그런데 그 중에서 render()
만 필수이다class Welcome extends React.Component {
render() {
return <h1>Hello, {this.props.name}</h1>;
}
}
<Welcome />
으로 작성props
라고 한다props
는 property의 줄임말로, .
(dot)으로 속성명에 접근가능하고, props.속성명
으로 속성 값을 가져올 수 있다// 1. Welcome 컴포넌트 정의
// Welcome 컴포넌트를 사용한 측(부모)에서 name이라는 attribute를 부여했고. props.name의 값을 사용
function Welcome(props) {
return <h1>Hello, {props.name}</h1>;
}
// 2. App 컴포넌트 정의
// div로 감싸져있고,
// <Welcome /> 컴포넌트를 세번 사용. name이라는 attribute를 부여했음
function App() {
return (
<div>
<Welcome name="Sara" />
<Welcome name="Cahal" />
<Welcome name="Edite" />
</div>
);
}
// 3. 화면에 React 요소 그려주기
ReactDOM.render(
<App />,
document.getElementById('root')
);
state란?? 말 그대로 컴포넌트의 상태 값
state와 props는 둘 다 object 이고, 화면에 보여줄 정보(상태)를 가지고 있다는 점에서 서로 비슷한 역할을 한다
class Button extends React.Component {
constructor() {
super();
this.state = {
clicked: false
}
}
render() {
return (
<div
className="btn"
// onClick시 this.setState라는 함수를 호출하여 state를 업데이트 한다
onClick={()=>{this.setState({ clicked: !this.state.clicked })}}
>
{this.state.clicked ? '좋아요' : '싫어요'}
</div>
);
}
}
ReactDOM.render(
<Button />,
document.getElementById('root')
);
constructor()
this.props.type
이 'like'이면 like-btn
이라는 클래스 속성이 추가render
, componentDidMount
, componentDidUpdate
, componentWillUnmount
등의 함수는 React.Component
class에서 제공하는 메서드onClick
이벤트를 추가해서 event handler 함수를 넘겨준다class Button extends React.Component {
constructor() {
super();
this.state = {
clicked: false
}
this.handleClick = this.handleClick.bind(this);
}
handleClick() {
this.setState({
clicked: !this.state.clicked
});
}
render() {
return (
<div
className={`btn ${this.props.type === 'like' ? 'like-btn' : ''}`}
onClick={this.handleClick}
>
{this.state.clicked ? '좋아요' : '싫어요'}
</div>
);
}
}
ReactDOM.render(
<Button type="like" />,
document.getElementById('root')
);
bind
를 해주지 않으면 event handler 함수내에서 this
의 context
를 잃어버려서 this가 undefined
가 된다this
키워드를 사용하고 있는데, 이 this는 Button 컴포넌트의 context
여야 한다this.state
에 접근하고, setState
함수도 쓸 수 있기 때문✨참고✨ context
- context는 React 컴포넌트 트리 안에서 전역적(global)이라고 볼 수 있는 데이터를 공유할 수 있도록 고안된 방법 react_context
✅ 목표!