웹 사이트의 전체 페이지를 하나의 페이지에 담아 동적으로 화면을 바꿔가며 표현
history.back
, history.forward
, history.go
…// public/index.html
<div id="root"></div>
// src/index.js
ReactDOM.render(
<React.StrictMode>
<App />
</React.StrictMode>
document.getElementById('root');
)
root id를 가진 div엘리먼트를 잡아 그 안에서 화면 꾸밈
주의 문법 규칙
원래 있던 부분 지우기 (App.js, App.css, index.css)
함수형 컴포넌트 → render매소드 필요 없음 바로 return
클래스형 컴포넌트 → render필요
ui만들기 (jsx, css)
스타일 적용
데이터 만들기
map함수 이용
{this.todoData.map((data) => (
<div style={this.getStyle()} key={data.id}>
<input type="checkbox" defaultChecked={false} />
{data.title}
<button style={this.btnStyle}>x</button>
</div>
))}
map함수 이용 key unique한 값으로 필수임!
리액트가 변경, 추가 또는 제거된 항목을 시별하는데 도움이 됨
요소에 안정적인 ID를 부여하려면 배열 내부의 요소에 키를 제공해야함
💡 리액트는 가상돔을 이용해서 바뀐 부분만 실제 돔에 적용! → key를 이용하여 어떤 부분이 바뀌었는지 인식할 수 있음유니크한 값을 키로 넣어주어야 하지만, 없다며 index를 사용하기도 함 (그러나 인덱스는 순서가 바뀌면 변경 됨으로 비추천)
handleClick = (id) => {
let newTodoData = this.todoData.filter((data)=> data.id !==id)
console.log('newTodoData : ', newTodoData)
}
<button style={this.btnStyle} onClick={() => this.handleClick(data.id)}>x</button>
리액트에서 데이터가 변할 때 화면을 다시 렌더링 해주기 위해서는 react state를 사용해야 함
컴포넌트의 렌더링 결과물에 영향을 주느 데이터를 갖고 있는 객체
state가 변경되면 컴포넌트는 리랜더링됨.
state는 컴포너트 안에서 관리됨
this.setState → 상태 업데이트
handleClick = (id) => {
let newTodoData = this.state.todoData.filter((data)=> data.id !==id)
this.setState({todoData: newTodoData});
}
회사에서 일하면서 vue를 좀 더 이해하게 되긴했나보다 vue랑 다른점들이 재밌고 vue에선 이렇게 썼는데 이런 생각들이 드는게 신기하당