본문 바로가기
react

[React]react 첫걸음

by 남민섭 2023. 1. 4.
728x90
반응형

사용자 인터페이스를 만들기 위한
자바스크립트 라이브러리

 

리액트(virtual DOM)
메모리에 가상으로 존재하는 DOM

 

자바스크립트 대표 라이브러리
리액트, 뷰, 앵귤러


리액트 장점

  • 컴퍼넌트 단위 개발(생상성 향상, 유지보수 용이) /
    (자바스크립트의 클래스를 배웠을때 파일 하나씩 쪼개서 사용해본적 있음)
  • 싱글페이지 어플리케이션(사용자 경험 개선)
  • 높은 인지도
  • 브라우저DOM보다 훨씬 속도 빠름

 

JSX구문  중요!!!!!

  • 닫혀야 하는 태그(태그는 꼭 닫혀야 합니다.)
  • 하나의 태그로 감싸져 있어야 함.(</>,<></>)
  • jsx안에 자바스크립트 값사용은 {}감싼다.
  • class지정은 classname속성을 사용
  • 주석 {/*주석 */}

 

상태 state 

props : 컴포넌트에게 값 전달하기

 

props는 object객체임

ex)

<Hello name="green" age="30"/>
{name: "green", age: "30"}
function Hello(props){
    {props.name}
    {props.age}
}

 

조건부렌더링

JSX구문은 if문 사용 불가능!!!!!! 삼항연산자만 사용!!!

 

실습.

파일명: Apps.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import './App.css';
import Hello from './components/Hello';
import Wrapper from './components/Wrapper';
 
 
function App() {
  return (
    <div className="App">
    <Wrapper> //<Wrapper> <<컴퍼넌트 명
         <Hello name="green" message="안녕" isSpecial={true}/> 
//값 설정 생략시 true임
         <Hello name="blue" message="반가워" isSpecial={true}/>
         <Hello name="Yellow" message="재미있어" isSpecial={false}/>
         <Hello name="red" message="굿굿"/>
         <Hello message="하하하 이름 기본값으로 저장"/>
     </Wrapper>
    </div>
  );
}
 
export default App;
cs

 

hello.js 파일에서 .defaultProps  name기본값을 지정해주었다

그래서 3번째 hello props에 name값을 적지 않고 message값만 주었음

 

props.defaultProps 는 props를 따로 지정해주지 않아도 기본값으로 전달해줌

 

파일명: Wrapper.js

1
2
3
4
5
6
7
8
9
10
11
12
import React from 'react';
 
const Wrapper = ({children}) => {
    return (
        <div>
            <h2>childern을 배워봅시다</h2>
            {children}
        </div>
    );
};
 
export default Wrapper;
cs

 

children메소드은 태그와 태그 사이의 모든 내용을 표시하기 위해 사용한 props

 

파일명: Hello.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import React from 'react';
 
function Hello({name, message, isSpecial}){
    return (//여러줄일때는 소괄호 감싸기
    <> 
        //let {name} = props 구조분해할당함
        <div className='hello'>
            {isSpecial ? <b>* </b> : null
//조건부렌더링 if문 사용 불가능 삼항연산자 사용
{/* &&연산자를 사용하면 false일때 값을 안줘도 됨 */}
            {name}님 안녕하세요 {message}</div> 
//자바스크립트 변수는 중괄호로 묶어주기
        <p>재미있는 리액트</p>
    </>
    )
}
//기본값 설정
Hello.defaultProps = {
    name"이름"
}
 
export default Hello;
cs

 


리액트 작업하면서 필요한 확장 플로그인 설치!!!

명령어 rsc 사용하면 import값, 화살표함수, export값 자동 생성함!!!!!

 

1
2
3
4
5
6
7
8
9
10
11
import React from 'react';
 
const 화살표함수 = () => {
//자바스크립트작성
  return (
    <div>
    //props작성
    </div>
  );
};
 
export default 화살표함수;
cs

 


 

!!click 이벤트를 사용하여 +1 -1씩 올리고 내리기 실습!!

그 전에 자바스크립트 이벤트 작성 방법 3가지

1) dom.addEventListener("이벤트", function(){})

2) <button onclick="함수이름()"> +1</button>

3) dom.on이벤트명 = function(){}

   ex) button.onclick = function(){}

 

**상태 관리하기

react useState함수!!!!!!
컴포넌트에서 동적인 값을 상태라고 합니다. (상태 state - 동적인값)
리액트에 useState함수를 사용하여 state를 관리합니다.

 

useState(초기값)
▶배열을 리턴

 

useState(0) => [newstate, setState()]
해석 ==> useState를 하면 배열을 줌. 0번째는 상태, 1번째는 업데이트해주는 함수

 

APP.js

1
2
3
4
5
6
7
8
9
10
11
12
13
import './App.css';
import Counter from './components/Counter';
 
 
function App() {
  return (
    <div className="App">
      <Counter/>
    </div>
  );
}
 
export default App;
cs

 

Counter.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import React,{ useState } from 'react';
 
 
const Counter = () => {
    const [number, setNumber] = useState(0);
//number(현재상태)에 useState(0)의 매개변수 0값 할당
//setNumber은 업데이트 내용 들어감
   //배열 구조분해할당
    const onIncrease = () => {
        console.log('+1');
        setNumber(number+1);
//업데이트 내용 number변수에 +1 한다
        console.log(number);
    }
    const onDncrease = () => {
        console.log('-1');
        setNumber(number-1);
//업데이트 내용 number변수에 -1 한다
        console.log(number);
    }
    return (
        <div>
            <h2>{number}</h2>
            <button onClick={onIncrease}>+1</button>
            <button onClick={onDncrease}>-1</button>
        </div>
    );
};
 
export default Counter;
//cs
 
 
 

 

출력

 

실습2

input 상태 관리하기(input 가 1개일때)

 

APP.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
 import './App.css';
 
 
import InputSample from './components/InputSample';
 
function App() {
  return (
    <div className="App">
      <InputSample/>
    </div>
  );
}
 
export default App;
cs

 

InputSample.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import React,{useState} from 'react';
 
const InputSample = () => {
    const [text, setText] = useState('');
    const onChange = (e) =>{
        setText(e.target.value);
    }
    const onReset = () => {
        setText('');
    }
    return (
        <div>
            <input onChange={onChange} value={text}/>
            <button onClick={onReset}>초기화</button>
            <div>
                <span >값: {text}</span>
            </div>
        </div>
    );
};
cs

 

실습3

input 상태 관리하기(input 가 2개일때)

 

InputSample.js  //App.js 위와 동일

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import React,{useState} from 'react';
 
const InputSample = () => {
    const [inputs, setInputs] = useState({
        username:'',
        usernickname:''
    });
    //구조분해 할당
    const {username, usernickname} = inputs;
    const onChange = (e) =>{
        console.log(e);
        const {value, name= e.target;
        setInputs({
            ...inputs,
            [name]: value
//키명을 바꾸고 싶을 땐 []사용
        })
    }
    const onReset = () => {
        console.log(111)
        setInputs({
            username: '',
            usernickname: ''
        });
    }
    return (
        <div>
            <input name="username" onChange={onChange} value={username}/>
            <input name="usernickname" onChange={onChange} value={usernickname}/>
            <button onClick={onReset}>초기화</button>
            <div>
                <span >값: {username},{usernickname}</span>
            </div>
        </div>
    );
};
export default InputSample;
cs

 

출력값

 

728x90
반응형

댓글