새소식

React ·JS·TS

React study note - 2

  • -

이전에는 class로 작성하였는데

함수 컴포넌트로 작성하기

 

 

 

            const [first, setFirst] = React.useState(Math.ceil(Math.random() * 9));
            const [second, setSecond] = React.useState(Math.ceil(Math.random() * 9));
            const [value, setValue] = React.useState('');
            const [result, setResult] = React.useState('');
            const [sum, setSum] = React.useState(0);
            const inputRef = React.useRef(null);

함수 컴포넌트 안에서 ref와 useState를 사용할 수 있게 해준게 react hooks

구조분해 => 변수자리에 배열이나 객체를 넣은 형태

 

 

react에서는 class를 선언해줄때 class="name" 으로 선언하지 못한다.

        class GuGuDan extends React.Component {

 

해당부분에서 사용되는  class와 혼동될 가능성이 있기 때문

                    <div className="sum">맞춘문제 : {sum}</div>

class를 선언할 땐 className으로 선언한다.

 

                        <label for=""></label>

같은 원리로 라벨부분에서 사용하는 for="name"도 사용이 불가능하다

 

                        <label htmlFor=""></label>

사용하기위해서 htmlFor="name"으로 사용

 

 

<html>
<head>
    <meta charset="utf-8">
    <title>web game</title>
</head>
<body>
    <div id="root"></div>
    <script crossorigin src="https://unpkg.com/react@18/umd/react.development.js"></script>
    <script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
   
   
    <script type="text/babel">
        const GuGuDan = () => {
            const [first, setFirst] = React.useState(Math.ceil(Math.random() * 9));
            const [second, setSecond] = React.useState(Math.ceil(Math.random() * 9));
            const [value, setValue] = React.useState('');
            const [result, setResult] = React.useState('');
            const [sum, setSum] = React.useState(0);
            const inputRef = React.useRef(null);

            const onChangeInput = (e) => {
                setValue(e.target.value);
            };

            const onSubmitForm = (e) => {
                e.preventDefault();
                if (parseInt(value) === first * second) {
                    setResult(`정답(${first} x ${second} = ${value})`);
                    setFirst(Math.ceil(Math.random() * 9));
                    setSecond(Math.ceil(Math.random() * 9));
                    setValue('');
                    setSum(sum+1);
                    inputRef.currunt.focus();
                } else {
                    setResult('오답');
                    setValue('');
                    inputRef.currunt.focus();
                    };
                }

            return (
                <React.Fragment>
                    <div>{first} 곱하기 {second} 는?</div>
                    <form onSubmit={onSubmitForm}>
                        <input ref={inputRef} onChange={onChangeInput} value={value} />
                        <button>입력</button>
                    </form>
                    <div id="result">{result}</div>
                    <div className="sum">맞춘문제 : {sum}</div>
                </React.Fragment>
                )
        }
    </script>
    <script type="text/babel">
        ReactDOM.createRoot(document.querySelector('#root')).render(<GuGuDan />); // react 18버전 코드
    </script>

</body>

</html>

전체코드 ( React Hooks 사용 )

 

 

 

 

Webpack

 

웹팩 은 노드기반

node.js -> 자바스크립트 실행기

 

프로젝트에 폴더 생성하고 

npm init 

그러면 package.json생성이 된다.

 

npm i react react-dom  

react 와  react-dom  을 설치해준다.

 

npm i -D webpack webpack-cli

webpack과 webpack-cli 를 설치해준다.

-D 는 개발용으로만 사용하겠다 라고 알려주는것.

 

  "dependencies": {
    "react": "^18.2.0",
    "react-dom": "^18.2.0"
  },
  "devDependencies": {
    "webpack": "^5.89.0",
    "webpack-cli": "^5.1.4"
  }

package.json에서 전체에 사용되는건 dependencies에 있고

개발에만 사용되는건 devDependencies에 있다.

 

 

module.exports = {
   
};

lecture 폴더에 webpack.config.js 생성하기

 

 

const React = require('react');
const ReactDom = require('react-dom');

lecture 폴더에 client.jsx  생성하기

npm을 통해 설치해준걸 불러오는 역할을 한다.

 

해당코드를 작성하면 문서에서 script를 통해서 불러올 필요가 없어진다.

 

js 와 jsx의 차이점은 react를 사용해서 jsx 문법을 사용하면 해당 확장자를 사용해서 명시해주는것

 

 

const React = require('react');
const ReactDom = require('react-dom');

class WordRelay extends React.Component {
    state = {

    }
    render() {
       
    }
}

ReactDom.render(<WordRelay />, document.querySelector('#root'));

client.jsx에서 작업된 파일을 재사용성을 위해 클래스 하나를 파일로 생성해준다

 

 

 

const React = require('react');
const { Component } = React;

class WordRelay extends Component {
    state = {

    }
    render() {
       
    }
}

module.exports = WordRelay;

WordRelay.jsx 파일생성

const { Component } = React; 를 통해서 react명시를 따로 하지않아도 동작한다.

파일을 쪼갤경우에 위에서 import 하고 아래에서 export 해줘야한다.

 

 

const WordRelay = require('./WordRelay');

export한 WordRelay.jsx 파일을 client.jsx 파일에서 가져와서 사용할 수 있다.

 

html 에서는 script src를 통해서 하나의 파일만 불러올 수 있어서 파일을 여러개 가져오기 위해 웹팩을 사용

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'React ·JS·TS' 카테고리의 다른 글

React - Project 진행일지 1  (0) 2023.11.17
React - D3 라이브러리 사용하기  (0) 2023.11.13
React study note - 1  (0) 2023.11.07
TypeScript study note - 1  (0) 2023.11.05
React/TS study - twitter clone(9)  (0) 2023.11.02
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.