확장 : Reactjs code snippets 설치

* {
    margin: 0;
    text-align: center;
  }
  
  .header {
    background-color: lightpink;
    height: 50px;
    padding: 10px;
  }
  
  .header a {
    margin: 10px;
  }
  
  .comp a {
    margin: 10px;
  }
  
  .home, .comp{
    background-color: lightskyblue;
    height: 400px;
    padding: 10px;
  }
  
  
  .footer {
    background-color: lightseagreen;
    height: 100px;
    padding: 10px;
  }

  button, hr {
    margin: 10px;
  }
import './App.css';
import Home from './component/Home';
import Header from './component/Header';
import Footer from './component/Footer';
import { BrowserRouter, Routes, Route } from 'react-router-dom';
import Comp1 from './component/Comp1';
import Comp2 from './component/Comp2';
import Comp3 from './component/Comp3';
import Param1 from './component/Param1';
import Param2 from './component/Param2';

function App() {
  return (
    <div className="App">
      <BrowserRouter>
        <Header />      

        <Routes>
          <Route path="/" element={<Home />}/>
          <Route path="/comp1" element={<Comp1 />}/>
          <Route path="/comp2" element={<Comp2 />}/>
          <Route path="/comp3" element={<Comp3 />}/>
          <Route path="/param/:id" element={<Param1 />}/>
          <Route path="/param"     element={<Param2 />}/>
        </Routes>
           
      </BrowserRouter>
      <Footer />      
    </div>
  );
}

export default App;
import React from 'react';

const Start = () => {

    // 해당 영역에서는 이와 같이 주석을 사용할 수 있습니다.
    const name = "도깨비";

    // JSX(JavaScriptXML) : 코드 간결, 가독성 좋음
    // JSX를 사용하는 주요 이유 중 하나는 JavaScript 함수 내에서 HTML과 유사한 문법을 사용할 수 있게 함으로써, 
    // 사용자 인터페이스(UI)를 더 직관적이고 선언적으로 구성

    const style = {
        color : "white",
        backgroundColor : "black",
        fontSize : "48px",
        fontWeight : "bold",
        padding : "16px"
    }

    return (
        <div className='start'>
            <h2>이 곳은 Start.jsx 영역입니다.</h2>
            <h2>Start.jsx 내용이 출력됩니다.</h2>

            {/* 주석은 아래와 같이 작성합니다. */}
            {/* {React.createElement('h2', null, `${name}님 반갑습니다.`)} */}
            <h2 style={style}>{name}님 반갑습니다.</h2>
        </div>
    );
};

export default Start;

 

import { Link } from "react-router-dom";

const Header = () => {

    return (
        <div className="header">
            {/* <h2>Header.jsx</h2> */}
            {/* a태그의 href 대신 Link태그의 to 사용 */}

            <Link to="/">Home</Link>
            <Link to="/comp1">Comp1</Link>
            <Link to="/comp2">Comp2</Link>
            <Link to="/comp3">Comp3</Link>

        </div>
    );
}

export default Header;

 

import React from 'react';
import Logo from '../image/PenLogo.png';

const Home = () => {

    const style1 = { width:"400px" };
    

    return (
        <div className="home">
            <h2>Home.jsx</h2>
            <img src={Logo} style={style1} alt="로고"></img>
        </div>
    );
}

export default Home;

 

import React from 'react';

const Footer = () => {
    return (
        <div className='footer'>
            <h3>COPYRIGHT © 2024 BY ICIA ALL RIGHTS RESERVED.</h3>
            <h2>프로젝트 기반의 리액트 기초 보수교육</h2>
            <h4>한국기술교육대학교 능력개발교육원 & 인천일보아카데미</h4>
        </div>
    );
};

export default Footer;
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>

<script>
    // ES6 문법
    // ES란, ECMAScript의 약자이며 자바스크립트의 표준, 규격을 나타내는 용어

    // [1] let, const 키워드
    var num1 = 10;
    var num1 = 20;
    num1 = 30;

    let num2 = 40;
    // let num2 = 50;
    num2 = 60;

    const num3 = 70;
    // const num3 = 80;
    // num3= 90;

    console.log(num1, num2, num3);

    // [2] 템플릿 리터럴
    // 사용법은 ` ` (back tick)으로 가능하다.
    // { } 중괄호 앞에 달러 표시를 통해 자바스크립트 표현식 사용이 가능하다.
    // console.log('num1 : ' + num1 + ", num2 : " + num2 + ", num3 : " + num3);
    console.log(`num1 : ${num1}, num2 : ${num2}, num3 : ${num3}`);

    // [3] 화살표 함수
    let name = '황인철';

    function myFunc(name) {
        return `이름 : ${name}`;
    }

    const myFunc1 = (name) => {
        return `이름 : ${name}`;
    }

    const myFunc2 = (name) => `이름 : ${name}`;

    console.log(myFunc(name));  // 이름 : 황인철
    console.log(myFunc1(name)); // 이름 : 황인철
    console.log(myFunc2(name)); // 이름 : 황인철

    // [4] 구조 분해 할당
    const student = {
        name1: "황인철",
        age: 30,
        addr: "인천"
    }

    const { name1, age, addr } = student;
    console.log(`name1 : ${name1}, age : ${age}, addr : ${addr}`);

    // [5] Spread 연산자
    // Array
    const arr1 = [1, 2, 3, 4, 5];
    const arr2 = [...arr1, 6, 7, 8, 9];

    console.log(arr2); // [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]

    // String
    const str1 = 'icia react';
    const str2 = [...str1];
    console.log(str2); // [ "i", "c", "i", "a", " ", "r", "e", "a", "c", "t" ]

</script>

</html>
import React from 'react';
import { student, students } from '../data/data';
import Student from './Student';

const Comp1 = () => {
    return (
        <div className="comp1 comp">
            {/* <h2>Comp1.jsx</h2> */}
            {/* <p>이름 : {student.name}, 나이 : {student.age}, 주소 : {student.addr}</p> */}

            <Student stu={student}/>

            <hr />
            
            {/* Student 컴포넌트와 students 배열을 사용해서 출력하기 */}
            {students.map( students => (
                <Student stu = {students} />
            ))}

        </div>
    );
};

export default Comp1;

 

// Student.jsx 파일에서 rsc

const Student = (props) => {
    // props : (prop)ertie(s)
    // 부모(상위) 컴포넌트에서 자식(하위)컴포넌트로 파라미터를 전달
    // es6의 분해할당을 통해 props로 받은 object stu의 값을 각각 name, age, addr 변수에 할당
    const { name , age, addr } = props.stu;
    
    return (
        <div className="student">
            <p>이름 : {name} , 나이 : {age} , 주소 : {addr}</p>
        </div>
    );
};

export default Student;
import React, { useState } from 'react';

const Comp2 = () => {
    
    /*
        state : 일반 자바 객체로 component에서 변할 수 있는 값

        lifecycle(생명주기)

        마운트 : 컴포넌트가 생성되고 브라우저에 출력될 때
        constructor : 컴포넌트가 새로 만들어 질 때마다 호출 되는 클래스 생성자 메소드
        render : 랜더링 메소드
        componentDidMount : 처음 랜더링 될 때 호출

        업데이트 : props나 state가 바뀔 때 부모컴포넌트가 재랜더링 될때
        shouldComponentUpdate : props나 state가 변경됐을 때 재랜더링을 할지 결정하는 메소드
        render : 재랜더링 
        componentDidUpdate : 컴포넌트의 업데이트 작업이 끝난 후 호출 

        언마운트 : 마운트의 반대, 컴포넌트가 제거 될 때
        componentWillUnmount : 컴포넌트가 브라우저에서 사라지기 전에 호출하는 메소드

        hooks : 함수형 컴포넌트에서 리액트의 state와
        생명주기 기능을 연동(hook) 할 수 있게 해주는 함수

        useState()
        const [ 변수명, 함수명 ] = useState(초기값);
    */
    
    // 버튼을 눌렀을 때 state값이 변하도록
    const [param1 , setParam1] = useState("초기값");

    const changeParam1 = () => {
        setParam1("안녕하세요");
    }

    // 버튼을 눌렀을 때 count가 증가 혹은 감소하도록
    const [count, setCount] = useState(100);

    const onIncrease = () => {
        setCount(count + 1);
    }

    const onDecrease = () => {
        setCount(count - 1);
    }

    // 값을 입력했을 경우 입력한 값이 출력되도록
    const [param2 , setParam2] = useState("");

    const textInput = (e) => {
        console.log(e.target.value);
        console.log(e.target.name);

        const { name, value } = e.target;
        console.log(`name : ${name}, value : ${value}`);

        setParam2(value);

    }

    // 버튼을 클릭했을 경우 컬러가 바뀌도록
    const [color, setColor] = useState("red");
    
    return (
        <div className='comp2 comp'>
            <p>{param1}</p>
            <button onClick={changeParam1}>버튼</button>
            <br /><hr />

            <p>count : {count}</p>
            <button onClick={onIncrease}>증가</button>
            <button onClick={onDecrease}>감소</button>
            <br /><hr />

            <p>입력값 : {param2}</p>
            <input type="text" name="param2" onChange={textInput}/>
            <br /><hr />

            <p style={{background:color, color:"white", fontSize : "30px"}}>안녕하세요.</p>
            <button onClick={()=>setColor("red")}>빨강</button>
            <button onClick={()=>setColor("blue")}>파랑</button>
            <button onClick={()=>setColor("green")}>초록</button>



        </div>
    );
};

export default Comp2;

 

import React, { useState } from 'react';
import { Link } from "react-router-dom";
import { students } from '../data/data';


const Comp3 = () => {

    const [id , setId] = useState();
    const [page , setPage] = useState();


    // path variable : "/param/12"
    // queryString : "/param?id=6&page=2"

    /*
        <input type="text" name="id" onChange={(e)=>{setId(e.target.value)}} placeholder="id입력"/><br/>
        <input type="text" name="page" onChange={(e)=>{setPage(e.target.value)}} placeholder="page입력"/><br/>
        <Link to={{
            pathname : "/param",
            search : `?id=${id}&page=${page}`
        }}>버튼</Link>
    */

    return (
        <div className="comp3 comp">
            <Link to={
                { pathname : "/param/20" }
            }>
                path variable
            </Link>

            <hr />

            {students.map(s => (
                <Link to={
                    {
                        pathname : `/param/${s.name}`
                    }
                }>{s.name}</Link>
            ))}

            <hr />

            <Link to="/param?id=6&page=2">param전송</Link>
            <Link to={{
                pathname : "/param",
                search : "?id=6&page=20&name=icia"
            }}>param전송(query String)</Link>

            {/* id값을 입력 */}
            {/* page값을 입력 */}
            {/* 버튼 클릭 => Param2 : id값 page값 전송 */}

            <hr />

            <input type="text" name="id" onChange={(e)=>{setId(e.target.value)}} placeholder="id입력"/><br/>
            <input type="text" name="page" onChange={(e)=>{setPage(e.target.value)}} placeholder="page입력"/><br/>
            <Link to={{
                pathname : "/param",
                search : `?id=${id}&page=${page}`
            }}>입력</Link>
        </div>
    );
}

export default Comp3;

 

import React from 'react';
import { useParams } from 'react-router-dom';


const Param1 = () => {

    const { id } = useParams();

    return (
        <div className='param1 comp'>
            <h2>요청 id : {id}</h2>
        </div>
    );
};

export default Param1;

 

import React from 'react';
import { useSearchParams } from 'react-router-dom';

const Param2 = () => {

    // /param?id=6&page=2
    const [params] = useSearchParams();
    console.log(params.size);

    const search = [...params];
    console.log(search);

    return (
        <div className='param2 comp'>
            {search.map(s => (
                <p>{s[0]} : {s[1]}</p>
            ))}
        </div>
    );
};

export default Param2;

+ Recent posts