์ ์ฒด ๊ธ
-
- [React.js] useSearchParams ํ (React Router)useSearchParams ํ (React Router)๋ค์ด๊ฐ๋ฉฐ๋ฆฌ์กํธ ๋ผ์ฐํฐ(React Router)์์ ์ ๊ณตํ๋ @useSearchParams@ ํ ์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค. useSearchParams๊ฐ๋ ๋ฆฌ์กํธ ๋ผ์ฐํฐ(React Router)๋ฅผ ์ฌ์ฉํ์ฌ URL์ ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ๋ฅผ ์ฝ๊ณ ์ค์ ํ๋ ๋ฐ ์ ์ฉํ ๋๊ตฌ์ด ํ ์ ์ฌ์ฉํ๋ฉด ์ปดํฌ๋ํธ๊ฐ URL์ ์ฟผ๋ฆฌ ์คํธ๋ง์ ์ฝ๊ฒ ์ ๊ทผํ๊ณ ์กฐ์ํ ์ ์๋ค.React Router v6์์ ๋์ ๋์๊ณ , ๊ธฐ์กด์ @useLocation@๊ณผ @useHistory@ ํ ์ ๊ฒฐํฉํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ์ฌ์ฉ๋ฒimport React from 'react';import { useSearchParams } from 'react-router-dom';function MyComponent() { /..
2024.07.08 -
- [React.js] defer() (React Router)defer() (React Router)๋ค์ด๊ฐ๋ฉฐ๋ฆฌ์กํธ ๋ผ์ฐํฐ(React Router)์์ ์ ๊ณตํ๋ @defer()@์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค. defer()๊ฐ๋ ๋ฆฌ์กํธ ๋ผ์ฐํฐ(React Router)์์ ์ ๊ณตํ๋ ๊ธฐ๋ฅ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ๋ถ๋ฌ์ค๊ธฐ ์ ์ ํ์ด์ง ์ผ๋ถ๋ฅผ ๋จผ์ ๋ ๋๋งํ๊ณ , ๋ฐ์ดํฐ๊ฐ ๋์ฐฉํ๋ฉด ๋๋จธ์ง ๋ถ๋ถ์ ๋ ๋๋งํ ์ ์๋๋ก ํด์ค๋ค.ํ์ด์ง ๋ก๋ฉ ์๋๋ฅผ ํฅ์์ํค๊ณ , ์ฌ์ฉ์ ๊ฒฝํ(UX)์ ๊ฐ์ ํ๋ ๋ฐ ๋์์ ์ค๋ค. ์ฃผ์ ํน์ง๋น๋๊ธฐ ๋ฐ์ดํฐ ๋ก๋ฉ@defer@๋ ๋น๋๊ธฐ ๋ฐ์ดํฐ ๋ก๋ฉ์ ์ฒ๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๋์ ์ผ๋ถ ํ์ด์ง ์ฝํ ์ธ ๋ฅผ ๋จผ์ ๋ ๋๋งํ๊ณ , ๋ฐ์ดํฐ๊ฐ ๋์ฐฉํ๋ฉด ๋๋จธ์ง ์ฝํ ์ธ ๋ฅผ ๋ ๋๋งํ๋ค.๋น ๋ฅธ ํ์ด์ง ๋ ๋๋ง๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ ํ์ด์ง ์ผ๋ถ๋ฅผ ์ฆ์ ๋ ๋๋งํ ์ ์์ด ํ์ด์ง ๋ก๋ฉ ์๊ฐ์ ๋จ์ถํ..
2024.07.07 -
- [React.js] useFetcher ํ (React Router)useFetcher ํ (React Router)๋ค์ด๊ฐ๋ฌ๋ฆฌ์กํธ ๋ผ์ฐํฐ(React Router)์์ ์ ๊ณตํ๋ @useFetcher()@ ํ ์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค. useFetcher๊ฐ๋ ๋ฆฌ์กํธ ๋ผ์ฐํฐ(React Router)์์ ํ์ด์ง ์ ํ ์์ด ๋ฐ์ดํฐ ๋ก๋ฉ์ด๋ ์ก์ ์ ์ฒ๋ฆฌํ ์ ์๊ฒ ๋์์ฃผ๋ ํ (Hook)์ฃผ๋ก ํผ ์ ์ถ์ด๋ ๋ฐ์ดํฐ ํ์นญ์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ฒ๋ฆฌํ๊ณ , ์ฌ์ฉ์์๊ฒ ์๊ฐ์ ์ ํ ์์ด ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ค์ผ ํ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉํ๋ฉด ์ ์ฉํ๋ค. ์ฃผ์ ๊ธฐ๋ฅ๋ฐ์ดํฐ ๋ก๋ฉ ๋ฐ ์ก์ ํธ๋ฆฌ๊ฑฐ๋ก๋ฉ ์ํ๋ฅผ ๊ด๋ฆฌํ๊ณ , ๋ฐ์ดํฐ๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก ๊ฐ์ ธ์ค๊ฑฐ๋ ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ถํ ์ ์๋ค.ํ์ด์ง ์ ํ ์์.ํ์ด์ง ์ ํ ์์ด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ฑฐ๋ ์ ์ถํ ์ ์์ผ๋ฏ๋ก, ์ฌ์ฉ์ ๊ฒฝํ์ด ๋ณด๋ค ๋งค๋๋ฝ๋ค.์ํ ๊ด๋ฆฌํ์ฌ ๋ก๋ฉ ์ํ์ ๋ก๋ฉ ์๋ฃ ํ ๋ฐ์ดํฐ๋ฅผ..
2024.07.07 -
- [React.js] json() ์ ํธ๋ฆฌํฐ ํจ์ (React Router)json() ์ ํธ๋ฆฌํฐ ํจ์ (React Router)๋ค์ด๊ฐ๋ฉฐ๋ฆฌ์กํธ ๋ผ์ฐํฐ(React Router)์์ ์ ๊ณตํ๋ @json()@ ์ ํธ๋ฆฌํฐ ํจ์์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค. json()๊ฐ๋ ๋ฆฌ์กํธ ๋ผ์ฐํฐ(React Router)์์ ์ ๊ณตํ๋ ํจ์React Router v6.4์์ ์ถ๊ฐ๋ ์ ํธ๋ฆฌํฐ ํจ์์ฃผ๋ก ๋ผ์ฐํฐ ํธ๋ค๋ฌ์์ ์ฌ์ฉ๋๋ฉฐ, JSON ํ์์ ๋ฐ์ดํฐ๋ฅผ ์๋ต(Response)์ผ๋ก ๋ฐํํ๋ค. ํน์ง์๋ ์ค์ ๋ Content-Type@json()@ ํจ์๋ ๋ฐํ๋ ์๋ต์ @Content-Type@ ํค๋๋ฅผ @application/json@์ผ๋ก ์๋์ผ๋ก ์ค์ ํ๋ค.๊ฐํธํ ์ฌ์ฉJSON ํ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ๋๋ฐ ํ์ํ ์ฝ๋๋ฅผ ๊ฐ์ํํ์ฌ, ๊ฐ๋ฐ์๊ฐ ๋ณด๋ค ์ง๊ด์ ์ด๊ณ ๊ฐํธํ๊ฒ ์ฌ์ฉํ ์ ์๊ฒ ํ๋ค.์ํ(Status) ์ฝ๋ ์ค์ ๊ฐ๋ฅ@..
2024.07.05 -
- [JavaScript] JSON(JavaScript Object Notation) ๋ค๋ฃจ๊ธฐJSON(JavaScript Object Notation) ๋ค๋ฃจ๊ธฐ๋ค์ด๊ฐ๋ฉฐ์น ์๋ฒ ๋ฟ๋ง ์๋๋ผ ๋ค์ํ ๊ณณ์์ ๋ฐ์ดํฐ๋ฅผ ๊ตํํ ๋ ์ฌ์ฉ๋๋ ํ์ผ ํ์์ธ JSON(JavaScript Object Notation)์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค. JSON(JavaScript Object Notation)๊ฐ๋ ๋ฐ์ดํฐ ๊ตํ ํ์์ผ๋ก ๋๋ฆฌ ์ฌ์ฉ๋๋ฉฐ, ๋ฌธ์์ด๋ก ์ธ์ฝ๋ฉ๋ ๊ฐ์ฒด๋ฅผ ํฌํจํ ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ๋ฅผ ํํํ๋ค.์๋ฐ์คํฌ๋ฆฝํธ๋ JSON ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๊ธฐ ์ํด JSON ๊ฐ์ฒด๋ฅผ ์ ๊ณตํ๋ค. ์ฃผ์ ๋ฉ์๋JSON ๊ฐ์ฒด์ ์ฃผ์ ๋ฉ์๋๋ก๋ @JSON.stringify()@์ @JSON.parse()@๊ฐ ์๋ค. โ JSON.stringfy()์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด(@{ prop: value, ... }@)๋ ๋ฐฐ์ด(@[value1, ..., valueN]@)..
2024.07.05 -
- [React.js] useRouterError ํ (React Router)useRouterError ํ ๋ค์ด๊ฐ๋ฉฐ๋ฆฌ์กํธ ๋ผ์ฐํฐ(React Router)์ @useRouterError@ ํ ์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค. useRouterError ํ ๊ฐ๋ ๋ฆฌ์กํธ ๋ผ์ฐํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(@react-router-dom@)์์ ์ ๊ณตํ๋ ํ ๋ผ์ฐํธ ์ฒ๋ฆฌ ์ค ๋ฐ์ํ ์๋ฌ๋ฅผ ์ก์์ ์ฒ๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.์ฃผ๋ก ์ค๋ฅ ๊ฒฝ๊ณ(Error Boundary)์ ํจ๊ป ์ฌ์ฉ๋์ด, ๋ผ์ฐํธ ๋ด์์ ๋ฐ์ํ๋ ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํ๊ณ ์ฌ์ฉ์์๊ฒ ์ ์ ํ ํผ๋๋ฐฑ์ ์ ๊ณตํ๋๋ฐ ์ฌ์ฉ๋๋ค. ์ฃผ์ ๊ธฐ๋ฅ์ค๋ฅ ๊ฐ์ง: ๋ผ์ฐํธ ์ปดํฌ๋ํธ์์ ๋ฐ์ํ๋ ์ค๋ฅ๋ฅผ ๊ฐ์งํ ์ ์๋ค.์๋ฌ ํธ๋ค๋ง: ๊ฐ์ง๋ ์ค๋ฅ๋ฅผ ์ฌ์ฉ์ ์ ์ ์๋ฌ ๋ฉ์์ง๋ ์ปดํฌ๋ํธ๋ก ๋ ๋๋งํ ์ ์๋ค.์ค๋ฅ ์ ๋ณด ์ ๊ณต: ์ค๋ฅ ๊ฐ์ฒด๋ฅผ ๋ฐํํ์ฌ ์ค๋ฅ ๋ฉ์์ง, ์คํ ํธ๋ ์ด์ค ๋ฑ์ ํ์ฉํ ์ ์๋ค. ์ฌ์ฉ ์์ ์์ 1..
2024.07.05 -
- [React.js] React Router์ loader ์์ฑReact Router์ loader ์์ฑ๋ค์ด๊ฐ๋ฉฐ๋ฆฌ์กํธ ๋ผ์ฐํฐ(@react-router-dom@)์ @loader@ ์์ฑ์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค. React Router์ @loader@ ์์ฑReact Router Version 6 ๋ถํฐ ์ฌ์ฉํ ์ ์๋ค.์ปดํฌ๋ํธ๊ฐ ๋๋๋ง๋๊ธฐ ์ ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ค.๋ก๋ ํจ์์์ ๋ฐํ๋ ๋ฐ์ดํฐ๋ ์๋์ผ๋ก ํด๋น ์ปดํฌ๋ํธ์์ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค.๋ก๋๋ ํจ์๋ก ์ ์๋๋ฉฐ, ํด๋น ํจ์์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ ์ปดํฌ๋ํธ์ ์ ๋ฌํ๋ค.๋ก๋ ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง๋๊ธฐ ์ ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ด, ์ปดํฌ๋ํธ๊ฐ ์ด๊ธฐ ๋ก๋ฉ ์ํ๋ฅผ ํ์ํ์ง ์๊ณ ๋ฐ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ ๋๋งํ ์ ์๋ค.๋ฐ๋ผ์ ๋ ๋์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ ์ ์๋ค. ์์ ์ฝ๋import { RouterProvider, cre..
2024.07.03 -
- [React.js] ๋ผ์ฐํฐ ์ค์ ๋ฐฉ๋ฒ (React Router)๋ผ์ฐํฐ ์ค์ ๋ฐฉ๋ฒ (React Route)๋ค์ด๊ฐ๋ฉฐReact Router(@react-router-dom@)์ ์ด์ฉํ์ฌ ๋ผ์ฐํฐ๋ฅผ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํด๋ณธ๋ค. ๋ฐฉ๋ฒํจํค์ง ์ค์นํ๊ธฐ@react-router-dom@ ํจํค์ง๋ฅผ ์ค์นํ๋ ค๋ฉด ํฐ๋ฏธ๋์ ์๋ ๋ช ๋ น์ ์คํํ๋ค.$ npm install react-router-dom # yarn add react-router-dom ๋ฐฉ๋ฒ 1@createBrowserRouter@๋ฅผ ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ค.import { createBrowserRouter, RouterProvider,} from "react-router-dom";import HomePage from "./pages/Home";import ProductsPage from "./pages/Products";co..
2024.07.02 -
- [React.js] ๋ฆฌ์กํธ์์์ ์ํ ๊ด๋ฆฌ ๋ฐฉ๋ฒ๋ฆฌ์กํธ์์์ ์ํ ๊ด๋ฆฌ ๋ฐฉ๋ฒ๋ฆฌ์กํธ(React)์์ ์ํ ๊ด๋ฆฌ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด์.๋ฆฌ์กํธ์์๋ ์ํ ๊ด๋ฆฌ๋ฅผ ์ํด ์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ์ํฉ์ ๋ฐ๋ผ ์ ์ ํ ๋ฐฉ๋ฒ์ ์ ํํ๋ ๊ฒ์ด ์ค์ํ๋ค. ์ํ ๊ด๋ฆฌ ๋ฐฉ๋ฒ1. ์ง์ญ ์ํ(Local State)๋ฆฌ์กํธ์ useState ํ ์ ์ฌ์ฉํ์ฌ ์ปดํฌ๋ํธ ๋ด๋ถ์์ ์ํ๋ฅผ ๊ด๋ฆฌํ ์ ์๋ค.์์ ๊ท๋ชจ์ ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ ๋จ์ผ ์ปดํฌ๋ํธ์์ ์ํ ๊ด๋ฆฌ๊ฐ ํ์ํ ๊ฒฝ์ฐ ์ ํฉํ๋ค.import React, { useState } from 'react';function Counter() { const [count, setCount] = useState(0); return ( You clicked {count} times setCount(count..
2024.06.30 -
- [React.js] <form> ์์์์ ์ ์ถ(Submit) ๋ฒํผ ์ฌ์ฉ ์ ๊ธฐ๋ณธ ๋์ ๋ง๋ ๋ฐฉ๋ฒ์์์์ ์ ์ถ(Submit) ๋ฒํผ ์ฌ์ฉ ์ ๊ธฐ๋ณธ ๋์ ๋ง๋ ๋ฐฉ๋ฒ๋ค์ด๊ฐ๋ฉฐ@@ ์์ ์์ @type@์ด @submit@์ธ ๋ฒํผ์ ๋๊ณ , ํด๋ฆญํ ๋, ํผ ์ ์ถ ํจ๊ณผ๊ฐ ๋ฐ์ํ๋ค.ํด๋น ๋ฒํผ์ ํด๋ฆญํ ๋ ํผ ๋ฐ์ดํฐ๊ฐ ์๋ฒ๋ก ์ ์ก๋๋ฉด์ ํ์ด์ง๊ฐ ์๋ก๊ณ ์นจ ๋๋๋ฐ, ์ด๊ฒ์ ํผ์ ๊ธฐ๋ณธ ๋์์ด๋ค. // ... ์ ์ถ ์ด๋ ํผ ์ ์ถ ํจ๊ณผ ๋ง์ ์ ์๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํด๋ณธ๋ค. ๋ฐฉ๋ฒ๋ฐฉ๋ฒ 1 : @@ ์์์ @type@ ์์ฑ์ @button@์ผ๋ก ์ง์ ํ๊ธฐ@@ ์์์ @type@ ์์ฑ์ @submit@์ด ์๋ @button@์ผ๋ก ์ง์ ํ๋ ๋ฐฉ๋ฒ์ด๋ค.function handleSubmit() { console.log("Submitted!");} ๋ก๊ทธ์ธ ๋ฐฉ๋ฒ 2 : @@ ์์์ @onClick@ ์ด๋ฒคํธ ํจ์์ @event...
2024.06.28 -
- [JavaScript] Intl.NumberFormat ๊ฐ์ฒดIntl.NumberFormat ๊ฐ์ฒด๋ค์ด๊ฐ๋ฉฐ์๋ฐ์คํฌ๋ฆฝํธ(JavaScript)์ @Intl.NumberFormat@ ๊ฐ์ฒด์ ๋ํด ์์๋ณด์.@Intl.NumberFormat@ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ฉด ์ซ์๋ฅผ ํน์ ๋ก์ผ์ผ๊ณผ ์ต์ ์ ๋ง์ถฐ ํฌ๋งทํ (Formatting) ํ ์ ์๋ค. Intl.NumberFormat ๊ฐ์ฒด๊ฐ๋ ์ํฌ๋ง์คํฌ๋ฆฝํธ(ECMAScript) ๊ตญ์ ํ API์ ์ผ๋ถ๋ก, ์ซ์์ ํ์์ ์ง์ ํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.๋ก์ผ์ผ(Locale)๊ณผ ์ต์ (Option)์ ์ฌ์ฉํ์ฌ ์ซ์์ ํ์์ ์ธ๋ถ์ ์ผ๋ก ์ง์ ํ ์ ์๋ค. ์ฃผ๋ก ํตํ, ์์์ ์๋ฆฌ์, ์ซ์ ๊ทธ๋ฃนํ ๋ฑ์ ํ์์ ์ง์ ํ๋๋ฐ ์ฌ์ฉ๋๋ค. ์ฌ์ฉ ๋ฐฉ๋ฒnew Intl.NumberFormat(locales, options) @locales@๋ก์ผ์ผ ์ง์ ๋ก์ผ์ผ(Locale)์ปดํจํฐ ํ๋ก๊ทธ..
2024.06.28 -
- [React.js] memo() ์ฌ์ฉํ ๋ ์ฃผ์ํ ์ memo() ์ฌ์ฉํ ๋ ์ฃผ์ํ ์ ๋ค์ด๊ฐ๋ฉฐ๋ฆฌ์กํธ(React.js)์ @memo()@๋ฅผ ์ฌ์ฉํ ๋ ์ฃผ์ํ ์ ์ ์ ๋ฆฌํด๋ณธ๋ค. memo()๊ฐ๋ ํจ์ํ ์ปดํฌ๋ํธ๋ฅผ ๋ฉ๋ชจ์ด์ ์ด์ (Memoization)ํ์ฌ ๋ถํ์ํ ๋ฆฌ๋ ๋๋ง์ ๋ฐฉ์งํ๋ ์ญํ ์ ํ๋ค.์ฃผ๋ก ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ํด ์ฌ์ฉ๋๋ค.import { memo } from 'react';const MyComponent = memo(function MyComponent({ prop1, prop2 }) => { // ...});export default MyComponent; ๊ธฐ๋ณธ์ ์ผ๋ก ์ปดํฌ๋ํธ์ @props@๊ฐ ๋ณ๊ฒฝ๋์ง ์์ผ๋ฉด ์ปดํฌ๋ํธ๋ฅผ ๋ค์ ๋ ๋๋งํ์ง ์๋๋ค.@props@์ ์์ ๋น๊ต(Shallow Comparison)๋ฅผ ํตํด ์ด๋ฃจ์ด์ง๋ค.์์ ๋น๊ต๋ ๊ธฐ๋ณธ ์๋ฃํ(์ซ์, ๋ฌธ..
2024.06.25 -
- [VS Code] JavaScript ๊ธฐ๋ณธ ํญ ๋ค์ฌ์ฐ๊ธฐ(Indent) ๊ฐ๊ฒฉ ์ค์ ๋ฐฉ๋ฒ (settings.json)JavaScript ํญ ๊ธฐ๋ณธ ๋ค์ฌ์ฐ๊ธฐ(Indent) ๊ฐ๊ฒฉ ์ค์ ๋ฐฉ๋ฒ (settings.json)๋ค์ด๊ฐ๋ฉฐJavaScript ์ฝ๋๋ฅผ VS Code์์ ์์ฑํ ๋, ๊ธฐ๋ณธ ํญ ๋ค์ฌ์ฐ๊ธฐ(Indent)๋ฅผ ์ง์ ํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์. ๋ฐฉ๋ฒVS Code์์ @[Ctrl]([Cmd])@ + @[Shift]@ + @[P]@๋ฅผ ๋๋ฌ์ @Settings@์ ๊ฒ์ํ์ฌ @[Preferences: Open User Settings (JSON)]@ ํญ๋ชฉ์ ํด๋ฆญํ๋ค. @Settings.json@ ํ์ผ ์์ ๋ด์ฉ์ด ์๋ํฐ์ ํ์๋๋๋ฐ, ์๋์ ๋ด์ฉ์ ์ถ๊ฐํด์ค๋ค.{ // ... // I want my default to be 4, but JavaScript/JSON to be 2 "editor.tabSize": 4, "[javasc..
2024.06.25 -
- [React.js] useEffect์ useCallbackuseEffect์ useCallback๋ค์ด๊ฐ๋ฉฐ๋ฆฌ์กํธ์์ ์ฌ์ฉ๋๋ @useCallback@๊ณผ @useEffect@์ ๋ํด ์์๋ณด์. @useCallback@๋ฆฌ์กํธ์์ ํจ์๋ฅผ ๋ฉ๋ชจ์ด์ ์ด์ (Memoization)ํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.๋ถํ์ํ ํจ์์ ์ฌ์์ฑ์ ๋ฐฉ์งํ๊ณ , ํจ์๊ฐ ์์กดํ๋ ๊ฐ์ด ๋ณ๊ฒฝ๋ ๋๋ง ์๋ก์ด ํจ์๋ฅผ ์์ฑํ๋๋ก ํ ์ ์๋ค. ์์ ์ฝ๋์๋์ ์ฝ๋์์ @handleClick@ ํจ์๋ @count@ ๋ณ์๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง ์ฌ์์ฑ ๋๋ค.๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ @handleClick@ ํจ์๋ ์ฌ์์ฑ๋์ง ์์ผ๋ฉฐ, ๊ฐ์ ํจ์๋ฅผ ๊ณ์ ์ฌ์ฉํ๊ฒ ๋๋ค.์ด๋ ๊ฒ ํ ๊ฒฝ์ฐ ํจ์์ ์ฌ์์ฑ์ ์ต์ํํ์ฌ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ํ๋๋ฐ ๋์์ ์ค ์ ์๋ค.import React, { useCallback, useState } from 'rea..
2024.06.24 -
- [Python] ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ ํ ๋ ๊ฒฐ์ธก๊ฐ ์ ๊ฑฐ ๋ฐฉ๋ฒ (Pandas)๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ ํ ๋ ๊ฒฐ์ธก๊ฐ ์ ๊ฑฐ ๋ฐฉ๋ฒ (Pandas)๋ค์ด๊ฐ๋ฉฐ๋ฐ์ดํฐ๋ฅผ ์ ์ฒ๋ฆฌํ ๋ ํ๋ค์ค(Pandas)๋ฅผ ์ด์ฉํ์ฌ ๊ฒฐ์ธก๊ฐ์ ์ ๊ฑฐํ๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํด๋ณธ๋ค. ๋ฐฉ๋ฒ๋ณดํต ๋ค์๊ณผ ๊ฐ์ด @df.dropna()@๋ฅผ ์ด์ฉํ ์๋ ์์ผ๋, ๋ฐ์ดํฐ์ ๊ณต๋ฐฑ(@' '@)์ด ์์ ๊ฒฝ์ฐ ์ ๊ฑฐํ์ง ๋ชปํ๋ค๋ ๋จ์ ์ด ์๋ค.df['column'] = df['column'].dropna() ๊ทธ๋์ ๋ค์๊ณผ ๊ฐ์ด @pd.to_numeric()@์ ๋จผ์ ์จ์ ๊ณต๋ฐฑ(@' '@), @NaN@ ๋ฑ ๊ฒฐ์ธก๊ฐ์ ์ ๋ถ @NaN@์ผ๋ก ๋ฐ๊ฟ์ค ํ, @dropna()@๋ฅผ ์ ์ฉ์์ผ์ฃผ๋ฉด ๋ชจ๋ ๊ฒฐ์ธก์น๋ค์ ์ ๊ฑฐํ ์ ์๋ค.df['column'] = pd.to_numeric(df['column']) # ๊ณต๋ฐฑ, NaN ๋ฑ ๋ชจ๋ ๊ฒฐ์ธก์น๋ค์ NaN์ผ๋ก ๋ฐ๊พธ๊ธฐdf['colu..
1 2024.06.21 -
- [React.js] useReducer ํuseReducer ํ ๋ค์ด๊ฐ๋ฉฐ๋ฆฌ์กํธ(React.js)์์ ์ฌ์ฉ๋๋ @useReducer@ ํ ์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค. @useReducer@ ๊ฐ๋ ์ปดํฌ๋ํธ์ ๋ฆฌ๋์(Reducer)๋ฅผ ์ถ๊ฐํ๋ ๋ฆฌ์กํธ ํ const [state, dispatch] = useReducer(reducer, initialArg, init?) (์ฐธ๊ณ ) ๋ฆฌ๋์ค(Reduce, @reduce()@)๋ฐฐ์ด์ ๊ฐ ์์์ ๋ํด ์ ๊ณต๋ ํจ์(@callback@ ํจ์)๋ฅผ ์คํํ๊ณ ํ๋์ ๊ฒฐ๊ณผ๊ฐ์ ๋ฐํํ๋ ๋ฉ์๋๋ฐฐ์ด์ ๊ฐ ์์๋ฅผ ๋์ (Accumulate)ํ์ฌ ๋จ์ผ ๊ฐ์ผ๋ก ์ค์ด๋ ์ญํ ์ ํ๋ค.์ฃผ๋ก ํฉ๊ณ, ํ๊ท , ์ต๋๊ฐ, ์ต์๊ฐ, ๊ฐ์ฒด ์์ฑ ๋ฑ ๋ค์ํ ๊ฒฝ์ฐ์ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋๋ค.const array = [1, 2, 3, 4, 5];const result = a..
2024.06.07 -
- [Tailwind CSS] whitespace-pre-wrap ํด๋์คwhitespace-pre-wrap ํด๋์ค๋ค์ด๊ฐ๋ฉฐํ ์ผ์๋(Tailwind) CSS์ @whitespace-pre-wrap@ ํด๋์ค์ ๋ํด ์์๋ณด์. @whitespace-pre-wrap@Tailwind CSS์์ ์ฌ์ฉํ๋ ์ ํธ๋ฆฌํฐ ํด๋์ค ์ค ํ๋๋ก, HTML ์์ ๋ด์ ํ ์คํธ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์ง์ ํ๋ค.์ด ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ฉด ํ ์คํธ๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ฒ๋ฆฌํ ์ ์๋ค. ๊ณต๋ฐฑ ์ ์งํ ์คํธ ๋ด์ ์ฐ์๋ ๊ณต๋ฐฑ์ ์ ์งํ๋ค.์ฌ๋ฌ ๊ฐ์ ๊ณต๋ฐฑ์ด ์์ด๋ ํ๋๋ก ์ถ์ฝ๋์ง ์๋๋ค. ๊ฐ์ ์ค๋ฐ๊ฟํ ์คํธ ๋ด์ ์ค๋ฐ๊ฟ ๋ฌธ์๋ฅผ ์ ์งํ๋ค.ํ ์คํธ์ ํฌํจ๋ ์ค๋ฐ๊ฟ(@\n@)์ ์ค์ ๋ก ์ค๋ฐ๊ฟ์ด ๋๋ค. ์๋ ์ค๋ฐ๊ฟํ ์คํธ๊ฐ ์์์ ๋๋น๋ฅผ ์ด๊ณผํ๋ฉด ์๋์ผ๋ก ์ค์ด ๋ฐ๋๋ค.์ด ํด๋์ค๋ @white-space: pre-wrap;@ CSS ์์ฑ๊ณผ ๋์ผํ ํจ..
2024.06.02 -
- [React.js] map ํจ์๋ฅผ ์ฌ์ฉํ ๋ ์ค๊ดํธ({})์ ์๊ดํธ(())map ํจ์๋ฅผ ์ฌ์ฉํ ๋ ์ค๊ดํธ({})์ ์๊ดํธ(())๋ค์ด๊ฐ๋ฉฐ๋ฆฌ์กํธ(React)์์ ์ค๊ดํธ @{}@์ ์๊ดํธ @()@๋ ์ฃผ๋ก JSX ์์์ ์ฌ์ฉ๋๋ฉฐ, ํนํ @map()@ ๋ฉ์๋์ ํจ๊ป ์ฌ์ฉ๋ ๋ ์ฃผ์ํด์ผ ํ ์ ์ด ๋ช๊ฐ์ง ์๋ค.@map@ ํจ์๋ฅผ ์ฌ์ฉํ ๋ ์ค๊ดํธ(@{}@)์ ์๊ดํธ(@()@)๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์ ์ฐจ์ด์ ๋ํด ์์๋ณด์. ์ค๊ดํธ(@{}@)์๋ฐ์คํฌ๋ฆฝํธ ํํ์(Expression)์ ๊ฐ์ธ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค.์ค๊ดํธ๋ฅผ ์ฌ์ฉํ ๋๋ ๋ฐ๋์ ๋ฐํ๊ฐ์ด ์์ด์ผ ํ๋ฉฐ, ๋ช ์์ ์ผ๋ก @return@ ํค์๋๋ฅผ ์ฌ์ฉํด์ ๊ฐ์ ๋ฐํํด์ผ ํ๋ค.์ฌ๋ฌ ์ค์ ์ฝ๋๊ฐ ํ์ํ๊ฑฐ๋ ์กฐ๊ฑด๋ฌธ ๋ฑ ๋ณต์กํ ๋ก์ง์ ์์ฑํด์ผ ํ ๋ ์ฌ์ฉํ๋ค.const items = ['Apple', 'Banana', 'Cherry'];const listItem..
2024.05.29 -
- [Python] or ์ฐ์ฐ์์ | ์ฐ์ฐ์์ ์ฐจ์ดor ์ฐ์ฐ์์ | ์ฐ์ฐ์์ ์ฐจ์ด๋ค์ด๊ฐ๋ฉฐํ์ด์ฌ(Python)์์ @or@ ์ฐ์ฐ์์ @|@ ์ฐ์ฐ์์ ์ฐจ์ด์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค.@or@ ์ฐ์ฐ์์ @|@ ์ฐ์ฐ์ ๋ชจ๋ ๋ ผ๋ฆฌ ์ฐ์ฐ์(Logical Operator)์ด์ง๋ง, ์ฌ์ฉ ๋ชฉ์ ๊ณผ ๋์ ๋ฐฉ์์ ์ฐจ์ด๊ฐ ์๋ค. @or@ ์ฐ์ฐ์์ ํ : ๋ ผ๋ฆฌ ์ฐ์ฐ์๋ ผ๋ฆฌ์ OR ์ฐ์ฐ์ ์ํํ์ฌ, ๋ ํผ์ฐ์ฐ์ ์ค ํ๋๋ผ๋ @True@์ผ ๊ฒฝ์ฐ @True@๋ฅผ ๋ฐํํ๋ค.๋จ์ถ ํ๊ฐ(Short-Circuit Evaluation) : ์ฒซ ๋ฒ์งธ ํผ์ฐ์ฐ์๊ฐ @True@์ด๋ฉด ๋ ๋ฒ์งธ ํผ์ฐ์ฐ์๋ ํ๊ฐ๋์ง ์๋๋ค.ํผ์ฐ์ฐ์ ํ์ : @bool@ ๋๋ @bool@๋ก ํ๊ฐ๋ ์ ์๋ ํ๊ฐ์ (๊ฑฐ์ ๋ชจ๋ ํ์ด์ฌ ๊ฐ์ฒด)๋ฐํ๊ฐ : @True@ ๋๋ @False@ @|@ ์ฐ์ฐ์์ ํ : ๋นํธ ์ฐ์ฐ์๋นํธ ๋จ์ OR ์ฐ์ฐ์ ์..
2024.05.29 -
- [VS Code] ๋น์ฃผ์ผ ์คํ๋์ค ์ฝ๋(VS Code)์์ JSX ์๋ ์์ฑ ๊ธฐ๋ฅ ์ผ๋ ๋ฐฉ๋ฒ๋น์ฃผ์ผ ์คํ๋์ค ์ฝ๋(VS Code)์์ JSX ์๋ ์์ฑ ๊ธฐ๋ฅ ์ผ๋ ๋ฐฉ๋ฒ๋ค์ด๊ฐ๋ฉฐ๋น์ฃผ์ผ ์คํ๋์ค ์ฝ๋(VS Code)์์ @return@ ๋ฌธ ์์ JSX๋ฅผ ์์ฑํ ๋, ์๋ ์์ฑ ๊ธฐ๋ฅ(Auto Complete)์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์. ๋ฐฉ๋ฒ์ด ๋ฐฉ๋ฒ์ ์ํด์๋ VS Code ์ค์ ์ ๋ฐ๋ก ํด์ค์ผ ํ๋ค.์ฐ์ , @Ctrl@(@Cmd@) + @,@๋ฅผ ๋๋ฌ์ VS Code ์ค์ ํ์ด์ง๋ฅผ ์ฐ๋ค. ๊ทธ๋ฆฌ๊ณ ์๋จ์ @[Open Settings (JSON)]@ ์์ด์ฝ์ ํด๋ฆญํ๋ค.๊ทธ๋ฆฌ๊ณ ์๋์ ์ฝ๋๋ฅผ @settings.json@ ์ฝ๋ ์์ ๋ฃ์ด์ค๋ค.{ ... "emmet.includeLanguages": { "javascript": "javascriptreact" }, "emmet.syntaxProfiles"..
2024.05.28 -
- [React.js] ํ ์คํธ ๋ฉ์์ง ๋์ฐ๊ธฐ ๊ฐ๋จ ์์ (ReactDOM.createPortal)ํ ์คํธ ๋ฉ์์ง ๋์ฐ๊ธฐ ๊ฐ๋จ ์์ (ReactDOM.createPortal)๋ค์ด๊ฐ๋ฉฐ๋ฆฌ์กํธ(React.js)๋ฅผ ์ด์ฉํ์ฌ ๊ตฌํํด๋ณธ ํ ์คํธ(Toast) ๋ฉ์์ง ๋์ฐ๊ธฐ ๊ฐ๋จ ์์ ์ฝ๋๋ฅผ ์ฌ๋ ค๋ณธ๋ค.๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ ์ํด @react-dom@ ํจํค์ง์ @createPortal@ ํจ์๋ฅผ ์ฌ์ฉํ์๋ค. ์ฝ๋ App.jsximport React from 'react';import Toast from './Toast';function App() { const [isToastVisible, setIsToastVisible] = React.useState(false); function handleEnrol() { setIsToastVisible(true); setTimeout(() => { setIs..
2024.05.21 -
- [React.js] useImperativeHandle๊ณผ forwardRefuseImperativeHandle๊ณผ forwardRef๋ค์ด๊ฐ๋ฉฐ๋ฆฌ์กํธ(React.js)์์ ์ฌ์ฉ๋๋ @useImperativeHandle@๊ณผ @forwardRef@์ ๋ํด ์์๋ณด์.@forwardRef@์ @useImperativeHandle@์ ์ปดํฌ๋ํธ ๊ฐ์ ์ฐธ์กฐ๋ฅผ ๋ค๋ฃจ๊ธฐ ์ํ ๋๊ตฌ์ด๋ค.์ด ๋๊ฐ์ง ๊ฐ๋ ์ ์ดํดํ๋ฉด ์ปดํฌ๋ํธ ์ธ๋ถ์์ ๋ด๋ถ์ DOM ์์๋ ๋ฉ์๋์ ์ ๊ทผํ ์ ์๊ฒ ๋์ด, ๊ณ ๊ธ ์ปดํฌ๋ํธ ์ค๊ณ์ ์ ์ฉํ๋ค๊ณ ํ๋ค. forwardRef๊ฐ๋ ๋ถ๋ชจ ์ปดํฌ๋ํธ๋ก๋ถํฐ ์ ๋ฌ๋ @ref@๋ฅผ ์์ ์ปดํฌ๋ํธ๊ฐ ๋ฐ์ ์ ์๊ฒ ํด์ค๋ค.@forwardRef@๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์์ ์ปดํฌ๋ํธ์ @ref@๋ฅผ ์ ๋ฌํ ์ ์๋ค.@ref@๋ DOM ์์์๋ง ๋ถ์ผ ์ ์๋ค.ํ์ง๋ง @forwardRef@๋ฅผ ์ฌ์ฉํ๋ฉด, ๋ถ๋ชจ ์ปดํฌ๋ํธ๊ฐ ..
2024.05.21 -
- [JavaScript] ์ต์ ๋ ์ฒด์ด๋ ์ฐ์ฐ์(Optional Chaining Operator), null ๋ณํฉ ์ฐ์ฐ์(Nullish Coalescing Operator) (ES11(ECMAScript2020))์ต์ ๋ ์ฒด์ด๋ ์ฐ์ฐ์(Optional Chaining Operator), null ๋ณํฉ ์ฐ์ฐ์(Nullish Coalescing Operator) (ES11(ECMAScript2020))๋ค์ด๊ฐ๋ฉฐES11(ECMAScript2020)์์ ๋์ ๋ ์ต์ ๋ ์ฒด์ด๋ ์ฐ์ฐ์์ null ๋ณํฉ ์ฐ์ฐ์์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค.์ต์ ๋ ์ฒด์ด๋ ์ฐ์ฐ์์ null ๋ณํฉ ์ฐ์ฐ์๋ ๋ชจ๋ ๋จ์ถ ํ๊ฐ(Shortcut Evaluation)์ ์ํด ์ฌ์ฉ๋๋ ์ฐ์ฐ์์ด๋ค. ์ต์ ๋ ์ฒด์ด๋ ์ฐ์ฐ์(Optional Chaining Operator, @?.@)์ขํญ์ ํผ์ฐ์ฐ์๊ฐ @null@ ๋๋ @undefined@์ธ ๊ฒฝ์ฐ @undefined@๋ฅผ ๋ฐํํ๊ณ , ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ์ฐํญ์ ํ๋กํผํฐ ์ฐธ์กฐ๋ฅผ ์ด์ด๊ฐ๋ค.ํ๋กํผํฐ ์ฐธ์กฐ : ๋ณ์๋ฅผ ํตํด ๋ณ์๊ฐ์ ์ฐธ์กฐํ๋ฏ์ด,..
2024.05.16 -
- [React.js] ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์์ ์ปดํฌ๋ํธ๋ก ์์ ๋๊ธฐ๋ ๋ฐฉ๋ฒ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์์ ์ปดํฌ๋ํธ๋ก ์์ ๋๊ธฐ๋ ๋ฐฉ๋ฒ๋ค์ด๊ฐ๋ฉฐ๋ฆฌ์กํธ์์ ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์์ ์ปดํฌ๋ํธ๋ก ์์๋ฅผ ๋๊ธฐ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์. ๋ฐฉ๋ฒ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์์ ์ปดํฌ๋ํธ๋ก ๋๊ธธ ์์์ ํ์ ์ ์ง์ ํ ์ ์๋๋ฐ, @string@ ํํ๋ก ์ง์ ํด์ฃผ๋ฉด ๋๋ค.์ด๋, @prop@ ์ด๋ฆ์ ์ฒซ ๊ธ์๋ ํญ์ ๋๋ฌธ์์ด์ด์ผ ํ๋ค.App.jsx@ButtonsContainer@ @prop@์ @"menu"@๋ก ์ง์ ํด๋ณด์๋ค.return ( handleSelect("components")} > Components handleSelect("jsx")} > JSX ..
2024.05.14 -
- [React.js] ์ค์๊ฐ์ผ๋ก ํน์ ์์์ ๊ธธ์ด๊ฐ ๊ฐ์ ธ์ค๊ธฐ์ค์๊ฐ์ผ๋ก ํน์ ์์์ ๊ธธ์ด๊ฐ ๊ฐ์ ธ์ค๊ธฐ๋ค์ด๊ฐ๋ฉฐ๋ฆฌ์กํธ์ ์ ์ค์๊ฐ์ผ๋ก ํน์ ์์์ ๊ธธ์ด๊ฐ์ ๊ฐ์ ธ์ค๋ ๋ฐฉ๋ฒ์ ์์๋ณด์. ๋ฐฉ๋ฒ์ฐ์ @useRef@๋ฅผ ์ด์ฉํ์ฌ ์ค์๊ฐ์ผ๋ก ๊ธธ์ด๊ฐ์ ๊ฐ์ ธ์ฌ ์์๋ฅผ ์ง์ ํด์ค๋ค.import {useRef} from 'react';// ...const horiRef = useRef(null);// ...return ( {/* ... */} ); ๋ค์๊ณผ ๊ฐ์ด @useEffect@์ @ResizeObserver@๋ฅผ ์ด์ฉํ์ฌ ํด๋น ์์์ ์ฌ์ด์ฆ๊ฐ์ ์ค์๊ฐ์ผ๋ก ๊ฐ์ ธ์ฌ ์ ์๋ค.import { useEffect } from 'react';useEffect(() => { const resizeObserver = new ResizeObserver((entries) => ..
2024.03.26 -
- [React.js] state์ ref ๋น๊ตํ๊ธฐstate์ ref ๋น๊ตํ๊ธฐ๋ค์ด๊ฐ๋ฉฐ๋ฆฌ์กํธ์์ ์์ฃผ ์ฌ์ฉ๋๋ @ref@์ @state@๋ฅผ ๋น๊ตํด๋ณด์. ๋น๊ต@useState@๋ฅผ ํตํด ์์ฑ๋ ๊ฐ์ฒด๋ ๋ฆฌ๋ ๋๋ง ์ค์ ์ด๊ธฐํ๊ฐ ๋์ง๋ง, @useRef@๋ฅผ ํตํด ์์ฑ๋ ๊ฐ์ฒด๋ ๋ฆฌ๋ ๋๋ง ์ค์ ์ด๊ธฐํ๊ฐ ๋์ง ์๋๋ค.@useState@๋ @[value, setValue]@๋ฅผ ๋ฐํํ๊ณ , @useRef@๋ @{ current : value }@๋ฅผ ๋ฐํํ๋ค. @ref@@state@@useRef(initialValue)@๋ @{ current: initialValue }@์ ๋ฐํ@useState(initialValue)@๋ @state@ ๋ณ์์ ํ์ฌ๊ฐ๊ณผ @state@ ์ค์ ์ ํจ์@([value, setValue])@๋ฅผ ๋ฐํMutable → ๋ ๋๋ง ํ๋ก์ธ์ค ์ธ๋ถ์์ @curren..
2024.03.02 -
- [Git] ๋ธ๋์น : ์๊ฒฉ ์ ์ฅ์์ ์ต์ ๋ด์ฉ์ ๊ฐ์ ธ์ค๊ณ , ๊ธฐ์กด์ ๋ธ๋์น ๋ด์ฉ ์ง์ฐ๊ธฐ๋ธ๋์น : ์๊ฒฉ ์ ์ฅ์์ ์ต์ ๋ด์ฉ์ ๊ฐ์ ธ์ค๊ณ , ๊ธฐ์กด์ ๋ธ๋์น ๋ด์ฉ ์ง์ฐ๊ธฐ๋ค์ด๊ฐ๋ฉฐํ์๋ค๊ณผ ํ์ ํ ๋ ํ์ํ ๋ธ๋์น ์์ ์ค, ๊ธฐ์กด์ ๋ด๊ฐ ๋ง๋ค์๋ ๋ธ๋์น ๋ด์ฉ์ ์ง์ฐ๊ณ , ์๊ฒฉ ์ ์ฅ์์ ์ต์ ๋ด์ฉ์ ๋ฐ์์ค๋ ๋ฐฉ๋ฒ์ ๊ฐ๋จํ๊ฒ ์ ๋ฆฌํด๋ณธ๋ค.์ฐ์ ์๊ฒฉ ์ ์ฅ์์ ๋ธ๋์น๋ฅผ ์ ๊ฑฐํด์ค ํ, ๊ทธ ๋ค์ ๋ก์ปฌ ์ ์ฅ์์ ๋ธ๋์น๋ฅผ ์ ๊ฑฐํด์ค์ผ ํ๋ค. ๋ฐฉ๋ฒ1๏ธโฃ ์๊ฒฉ ์ ์ฅ์ ๋ธ๋์น ์ญ์ ํ๊ธฐ์๊ฒฉ ์ ์ฅ์์ ๋ด์ฉ ์ญ์ ํ๊ธฐ$ git push -d origin 2๏ธโฃ ์๊ฒฉ ์ ์ฅ์์ ๋ด์ฉ์ ๋ก์ปฌ ์ ์ฅ์๋ก ๊ฐ์ ธ์ค๊ธฐ์๊ฒฉ ์ ์ฅ์์ ์ ์ฅ๋ (์ต๊ทผ์) ๋ด์ฉ์ ๋ก์ปฌ ์ ์ฅ์๋ก ๊ฐ์ ธ์ค๊ธฐ$ git pull 3๏ธโฃ ๋ก์ปฌ ์ ์ฅ์ ๋ธ๋์น ์ญ์ ํ๊ธฐ๋ก์ปฌ ์ ์ฅ์์ ์ ์ฅ๋ ๋ธ๋์น ์ญ์ ํ๊ธฐ$ git branch -d branch_name ๋ง์ฝ ๋ธ๋์น๊ฐ ๋ณํฉ๋์ง ์์..
2024.02.27 -
- [React.js] ๋ง์ฐ์ค ํธ๋ฒ ํจ๊ณผ๋ฅผ ์ ์ฉํ๊ธฐ ์ํ ์ปค์คํ ํ ๋ง๋ค๊ธฐ (useHover.js)๋ง์ฐ์ค ํธ๋ฒ ํจ๊ณผ๋ฅผ ์ ์ฉํ๊ธฐ ์ํ ์ปค์คํ ํ ๋ง๋ค๊ธฐ (useHover.js) ๋ค์ด๊ฐ๋ฉฐ ์์ ์์ ๋ง์ฐ์ค ์ปค์๋ฅผ ํธ๋ฒ ์, ํจ๊ณผ๊ฐ ์๋ํ ์ ์๋๋ก ์ปค์คํ ํ ์ ๋ง๋ค์ด๋ณด์. ๋ฐฉ๋ฒ ๊ธฐ์กด์ ๋ฐฉ๋ฒ ์ปค์คํ ํ ์ ์ฌ์ฉํ์ง ์์ ๊ฒฝ์ฐ, @mouseover@, @mouseout@์ ๋ํ ๊ฐ๊ฐ์ ์ด๋ฒคํธ ํธ๋ค๋ฌ ํจ์๋ฅผ ๋ง๋ค์ด์ ๋ง์ฐ์ค ํธ๋ฒ ํจ๊ณผ๋ฅผ ์ ์ฉ์ํค๊ณ ์ถ์ ๋์์ ์ฐ๊ฒฐํด ์ฃผ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํ ์ ์์๋ค. import React, { useState } from react; const MyComponent = () => { const [isHovered, setIsHovered] = useState(false); const handleMouseOver = () => { setShowPopup(true); }; cons..
2024.02.20 -
- [React.js] Node.js ์ค์น๋ถํฐ ๋ฆฌ์กํธ ํ๋ก์ ํธ ํ ์คํธ๊น์ง ์ ๋ฆฌNode.js ์ค์น๋ถํฐ ๋ฆฌ์กํธ ํ๋ก์ ํธ ํ ์คํธ๊น์ง ์ ๋ฆฌ ๋ค์ด๊ฐ๋ฉฐ Node.js ์ค์น, NVM ์ค์น, ๋ฆฌ์กํธ ํ๋ก์ ํธ ์์ฑ ๋ฐ ํ ์คํธ๊น์ง์ ๊ณผ์ ์ ์ ๋ฆฌํด๋ณธ๋ค. ๋ฐฉ๋ฒ (1) Node.js ์ค์น ํ์ฌ ๋๋ ํ์์ ์ฌ์ฉํ๊ณ ์๋ ๋ฒ์ ์ Node.js๋ฅผ ์ค์นํ๋๋ก ํ๋ค. Node.js Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. nodejs.org (2) nvm ์ค์น NVM(Node Version Manager)์ Node.js์ ๋ฒ์ ์ ๊ด๋ฆฌํด์ฃผ๋ ํ๋ก๊ทธ๋จ์ด๋ค. @nvm-setup.exe@ ์ค์น ํ์ผ์ ๋ค์ด๋ก๋ ๋ฐ์ ์คํํ๋ค. Releases · coreybutler/nvm-windows A node.js version mana..
2024.02.05 -
- [PyQt] QTableWidget ์์ ํญ๋ชฉ ๊ฒ์ ๋ฐ ๋ณต์ ๊ธฐ๋ฅ ๊ตฌํ ๋ฐฉ๋ฒQTableWidget ์์ ํญ๋ชฉ ๊ฒ์ ๋ฐ ๋ณต์ ๊ธฐ๋ฅ ๊ตฌํ ๋ฐฉ๋ฒ๋ค์ด๊ฐ๋ฉฐPyQt์ @QTableWidget@ ์์ ํญ๋ชฉ์ ๊ฒ์ํ๊ณ , ์๋์ ๋ด์ฉ์ ๋ณต์ ์ํค๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํด๋ณธ๋ค. ๋ฐฉ๋ฒ๊ฒ์ํ๊ณ ์ ํ๋ ๋ด์ฉ์ด ํด๋น ํ์ ์์ ๊ฒฝ์ฐ ํ์ํ๊ณ , ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ์จ๊ธฐ๋ ๋ฐฉ๋ฒ์ ์ด์ฉํ๋ค.from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QTableWidget, QTableWidgetItem, QPushButton, QLineEditclass SearchResetTableApp(QWidget): def __init__(self): super(SearchResetTableApp, self).__init__() self.ini..
2024.01.29