컴포넌트 만들기

스카치·2022년 12월 13일
0

React 컴포넌트

목록 보기
3/7

기본 구조

// html
<body>
	<div id="root"></div>
	<button id ='btn_plus'>+</button>
</body>
<style>
	* {
      margin :0;
      padding :0;
      border: 0;
    }
    #root p {
      color : white;
      font-size: 20px;
      background-color: green;
      text-align: center;
      width: 200px;
    }
    #btn_plus {
      background-color: red;
      width: 200px;
      border: solid 2px #000000;
      font-size: 15px;
    }
</style>

==> 결과

고전적 프론트엔드 방식으로 Dom조작

const root = document.querySelector('#root');
const btn_plus = document.querySelector('#btn_plus')
let i = 0

root.innerHTML = `<p>init : ${i} </p>`
btn_plus.addEventListener('click' , () => {
root.innerHTML = `<p>init : ${++i} </p>`
})

React를 사용하지 않고 컴포넌트화 하여 Dom 조작

const component = {
        message: 'init',
        count : 0,
        render () {
          return `<p> ${this.message} : ${this.count}</p>`
        }
      }

function render(rootElement, component ) {
  rootElement.innerHTML = component.render()
}

// 초기화
render(document.querySelector('#root'), component)

// 버튼 클릭시
document.querySelector('#btn_plus').addEventListener('click', ()=> {
  component.message = 'update'
  component.count++
  render(document.querySelector('#root'), component)
})

// 값이 바뀔 때마다 다시 랜더를 해야한다 => React를 통해 간편화가능

React로 Component를 만들어 Dom 조작

const Component = props => {
      return React.createElement('p', null , `${props.message} : ${props.count}`)
    }

// 초기화
ReactDOM.createRoot(document.querySelector('#root'))
    .render(React.createElement(Component, {message: 'init', count:0}, null),
    )

// 갱신
document.querySelector('#btn_plus').addEventListener('click', () => {
      ReactDOM.createRoot(document.querySelector('#root'))
      .render(React.createElement(Component, {message: 'update', count: 10}, null),
      )
    })

클래스를 사용한 컴포넌트 생성

// 정의
	class ClassComponent extends React.Component {
		render () {
			return <div>hello</div>
		}
	}
// 사용
	ReactDOM.createRoot(document.querySelector('#root')).render(<ClassComponent />)

함수를 사용한 컴포넌트 생성

// 정의1
function FunctionComponent () {
  return <div>Hello</div>
}

// 정의2
const FunctionComponent = () => <div>Hello</div>

// 사용
ReactDOM.createRoot(document.querySelector('#root')).render(<FunctionComponent />)

=> 결과

0개의 댓글