React

react 추가 study

heeyeonjeong 2020. 11. 4. 15:47
반응형

⭐ class 방식으로 react 코드 짤때,

실무에서 constructor,super 생략하고 state만 더 자주 사용한다

 

class GuGuDan extends React.Component{
	contructor(props){
    super(props);
    this.state = {
    	first: ~ ,
        second: ~ ,

    }
  }
}

//실무에서는 생략 후 아래 방법을 더 많이 쓴다
class GuGuDan extends React.Component{
	state = {
    	first: ~ ,
        second: ~ ,
    }
}

 

 

⭐ render함수 내부에서는 function을 사용해도 되지만,

      class 내부에서 메서드를 만들어서 사용할때는, arrow function을 사용해야한다.

(render내에서 onsubmit 을 정의해도 되지만, render 밖으로 빼서 보기 좋게 정리.)

 

class GuGuDan extends React.Component{
   this.state = {
    	first: ~ ,
        second: ~ ,
    };
    
   onSubmit = (e) => { e. preventDefault()}
   
   render(){
   //return ( ),괄호도 선택사항 / 보통 html코드를 깔끔하게 정리하기 위해선, 쓰는게 좋음
   	 return (
		<div>
        	<button onSubmit={this.onSubmit}></button>
        </div>    
     )   
   }
}

 

 

⭐ +복습) input의 value가 매번 바뀌길 원한다면 -> this.setState 사용.

 

 

⭐ render 내부에 쓸데없이 빈 div가 들어가는 것을 원하지 않는다면, <React.Fragmanet>사용하기

 

class GuGuDan extends React.Component{
   this.state = {
    	first: ~ ,
        second: ~ ,
    };
    
   onSubmit = (e) => { e. preventDefault()}
   
   render(){
     return (
         <React.fragment>
        	<button onSubmit={this.onSubmit}></button>
	  </React.fragment>
     );
   }
}

 

 

⭐⭐ class vs React Hooks 비교해보기 (react는 hooks를 더 권장한다)

⭐ class

 

class GuGuDan extends React.Component {
	//state 선언
    state = {
      first: Math.ceil(Math.random() * 9),
      second: Math.ceil(Math.random() * 9),
      value: '',
      result: '',
    };
    ////state 선언

    onSubmit = (e) => {
      e.preventDefault();
      if (parseInt(this.state.value) === this.state.first * this.state.second) {
         //setState 사용
        this.setState({
          result: '정답',
          first: Math.ceil(Math.random() * 9),
          second: Math.ceil(Math.random() * 9),
          value: '',
        });
      } else {
        this.setState({
          result: '땡',
          value: '',
        });
      }
    };

    onChange = (e) => {
      this.setState({ value: e.target.value });
    };

    // 컨텐츠
    render() {
      return (
        <React.Fragment>
          <div>{this.state.first} 곱하기 {this.state.second}는?</div>
          <form onSubmit={this.onSubmit}>
            <input type="number" value={this.state.value} onChange={this.onChange}/>
            <button>입력!</button>
          </form>
          <div>{this.state.result}</div>
        </React.Fragment>
      );
    }
  }

 

 

⭐ hooks

 

const React = require('react');
const { useState, useRef } = React;

const GuGuDan = () => {
	//state 선언
  const [first, setFirst] = useState(Math.ceil(Math.random() * 9));
  const [second, setSecond] = useState(Math.ceil(Math.random() * 9));
  const [value, setValue] = useState('');
  const [result, setResult] = useState('');
  const inputEl = useRef(null);
  //state 선언

  const onSubmitForm = (e) => {
    e.preventDefault();
    if (parseInt(value) === first * second) {
    //setState 사용
      setResult('정답');
      setFirst(Math.ceil(Math.random() * 9));
      setSecond(Math.ceil(Math.random() * 9));
      setValue('');
      inputEl.current.focus();
    } else {
      setResult('땡');
      setValue('');
      inputEl.current.focus();
    }
  };
  return (
    <>
      <div>{first} 곱하기 {second}는?</div>
      <form onSubmit={onSubmitForm}>
        <input
          ref={inputEl}
          type="number"
          value={value}
          onChange={(e) => setValue(e.target.value)}
        />
        <button>입력!</button>
      </form>
      <div id="result">{result}</div>
    </>
  );
};
module.exports = GuGuDan;

 

 

⭐ webpack을 사용하는 이유

- 수십 수만개의 자바스크립트 파일을 하나로 합쳐줌

- node를 알아야한다 (node는 서버가아니라 자스 실행기이다.)