FrontEnd/React

[React] JSX와 state, onClick, Component (코딩애플 유튜브 무료강의)

JJoajjoa 2024. 3. 28. 20:21

유튜브 코딩애플 수업 듣는 중

 

JSX 문법

  • class 넣을 땐, className
  • 변수 꽂을 땐(== 데이터 바인딩), {변수명}
  • style 넣을 땐, style={{ 이름: '값' }}
import './App.css';

function App() {

    let post = '강남 우동 맛집';

    return (
        <div className="App">
            <div className='black-nav'>
                <h4 style={{ color: 'red', fontSize: '16px' }}>블로그</h4>
            </div>

            <h4> {post} </h4>
        </div>
    );
}

export default App;
.App {
  text-align: center;
}

.black-nav {
  display: flex;
  background: black;
  width: 100%;
  color: white;
  padding-left: 20px;
}

 

 

※ 리턴 소괄호 안에는 무적권 하나의 태그만 있어야함

 


 

state

리액트에서 자료를 잠깐 저장할 때 사용함

import { useState } from 'react';

let [a, b] = useState('어쩌구 저쩌구');

a : state에 보관했던 자료

b : state 변경을 도와주는 함수

 

▼ 변수문법이 있는데 왜 state를 씀?

더보기

일반 변수는 갑자기 변경되면 html에 자동으로 반영이 안됨

state는 갑자기 변경되면 html이 자동 재랜더링 됨

따라서, 변동이 있을 때 자동으로 html에 반영되게 만들고 싶을 때 state를 사용함

→ 자주 변경될 것 같은 부분에 사용하기

 

 


 

onClick

/* eslint-disable */ // 워닝메세지 지워주는거

import { useState } from 'react';
import './App.css';

function App() {

    let [글제목, b] = useState(['쪼랭', '부추', '몽청']);
    let [따봉] = useState(0);

    function 함수() {
        console.log(1);
    }

    return (
        <div className="App">
            <div className='black-nav'>
                <h4>ReactBlog</h4>
            </div>

            <div className='list'>
                <h4>{ 글제목[0] } <span onClick={ 함수 }>👍</span> {따봉} </h4>
                <p>03월28일 발행</p>
            </div>
            <div className='list'>
                <h4>{ 글제목[1] } <span onClick={ function() { console.log(1) } }>👍</span> {따봉} </h4>
                <p>03월28일 발행</p>
            </div>
            <div className='list'>
                <h4>{ 글제목[2] } <span onClick={ () => { console.log(1) } }>👍</span> {따봉} </h4>
                <p>03월28일 발행</p>
            </div>

        </div>
    );
}

export default App;

 

 


 

▼ state 변경 함수 특징

기존 state == 신규 state 의 경우에는 변경 안해줌 (검사를 한번 거침)

 

▼ 자바스크립트에서의 [array나 object] 특징

array나 object를 담은 변수에는 그게 어디에 저장되어있는지 알려주는 화살표만 저장함

변수1과 변수2의 화살표가 같으면 변수1 == 변수2를 비교해도 ture가 나옴

 

▼ [...어쩌구] 의 ...

화살표를 새로 바꿔달라는 뜻

괄호를 벗겨달라는, 그다음에 다시 괄호를 씌워달라는 문법

 

더보기

기존 state가 array나 object 데이터라면, 독립적인 카피본을 만들어서 수정해줘야 함

 

import { useState } from 'react';
import './App.css';

function App() {

    let [글제목, 글제목변경] = useState(['쪼랭', '부추', '몽청']);
    let [따봉, 따봉변경] = useState(0);

    return (
        <div className="App">
            <div className='black-nav'>
                <h4>ReactBlog</h4>
            </div>

            <button onClick={() => {
                let copy = [...글제목];
                copy[0] = '냥아치';
                글제목변경(copy);
            }}>글 수정</button>

            <button onClick={() => {
                let sort = [...글제목.sort()]
                글제목변경(sort)
            }}>오름차순정렬</button>

            <div className='list'>
                <h4>{글제목[0]} <span onClick={() => { 따봉변경(따봉 + 1); }}>👍</span> {따봉} </h4>
                <p>03월28일 발행</p>
            </div>
            <div className='list'>
                <h4>{글제목[1]}</h4>
                <p>03월28일 발행</p>
            </div>
            <div className='list'>
                <h4>{글제목[2]}</h4>
                <p>03월28일 발행</p>
            </div>

        </div>
    );
}

export default App;

 


 

Component

▼ Component 만드는 방법

function을 만들고 return() 안에 html 담기 → <함수명 /> 쓰기

function은 다른 함수 바깥에 영어 대문자로 시작하게 만들어야 함

 

언제쓸까

1. 반복적인 html을 축약할 때

2. 큰 페이지들

3. 자주 변경되는 것들

 

그런데 state를 가져다 쓸 때 문제가 생길 수 있음

 

import { useState } from 'react';
import './App.css';

function App() {

    let [글제목] = useState(['쪼랭', '부추', '몽청']);
    let [따봉, 따봉변경] = useState(0);

    return (
        <div className="App">
            <div className='black-nav'>
                <h4>ReactBlog</h4>
            </div>

            <div className='list'>
                <h4>{글제목[0]} <span onClick={() => { 따봉변경(따봉 + 1); }}>👍</span> {따봉} </h4>
                <p>03월28일 발행</p>
            </div>
            <div className='list'>
                <h4>{글제목[1]}</h4>
                <p>03월28일 발행</p>
            </div>
            <div className='list'>
                <h4>{글제목[2]}</h4>
                <p>03월28일 발행</p>
            </div>

            <Modal />

        </div>
    );
}

// 방법 1
function Modal() {
    return (
        <div className='modal'>
            <h4>제목</h4>
            <p>날짜</p>
            <p>상세내용</p>
        </div>
    )
}

// 방법 2
const Modal = () => {
    return (
        <div className='modal'>
            <h4>제목</h4>
            <p>날짜</p>
            <p>상세내용</p>
        </div>
    )
}

export default App;