๐Ÿ’ป My Work 112

[React/JS] ์š”์†Œ๊ฐ€ ๊ฐ์ฒด(Object)์ธ ๋ฐฐ์—ด(array) ์ปดํฌ๋„ŒํŠธ ๋ Œ๋”๋ง / ํ•˜๋‚˜๋งŒ ์ถ”๊ฐ€, ์‚ญ์ œ, ์—…๋ฐ์ดํŠธ ๊ด€๋ฆฌํ•˜๊ธฐ

์œ„ ์˜ˆ์‹œ๋ฅผ ๊ตฌํ˜„ํ•ด๋ณผ๊ฒŒ์š”! โœจ ์šฐ์„ , ์ „์ฒด ์ฝ”๋“œ๋ฅผ ๋ณด๊ณ  ๋ฐ‘์—์„œ ์„ค๋ช…์„ ๋ง๋ถ™์ด๋Š” ์‹์œผ๋กœ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!! 00. ์ „์ฒด ์ฝ”๋“œ ๋ช‡๋ช‡ ์ปดํฌ๋„ŒํŠธ๋Š” material design์„ ๋ฐ”ํƒ•์œผ๋กœ ๊ตฌํ˜„ํ–ˆ๋‹ค๋Š” ์  ์œ ์˜ํ•ด ์ฃผ์„ธ์š”! MainPage.js import * as React from "react"; import { Grid, Button, Card, IconButton, Stack } from "@mui/material"; import ClearIcon from "@mui/icons-material/Clear"; export default function MainPage() { // ๋ฐฐ์—ด const [data, setData] = React.useState([]); /** ๊ฐ item update */ function on..

ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธ€์“ฐ๊ธฐ ๋ฒ„ํŠผ ์•ˆ ๋ณด์—ฌ์š” (ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• & ๊ธ€์“ฐ๊ธฐ ๋ฒ„ํŠผ ๋‹จ์ถ•ํ‚ค)

์•„๋ž˜์™€ ๊ฐ™์ด ๊ธ€์“ฐ๊ธฐ ๋ฒ„ํŠผ์ด ์•ˆ ๋ณด์—ฌ์„œ ๊ธ€์“ฐ๊ธฐ๋ฅผ ๋ชป ํ•  ๋•Œ๊ฐ€ ์ข…์ข… ์žˆ์Šต๋‹ˆ๋‹ค!! ํ•ด๊ฒฐํ•ด๋ด…์‹œ๋‹ค! 01. ํฌ๋กฌ ์„ค์ •์—์„œ ์ธํ„ฐ๋„ท ์‚ฌ์šฉ ๊ธฐ๋ก ์‚ญ์ œ 1. ํฌ๋กฌ ์„ค์ •์— ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค. 2. ๊ฒ€์ƒ‰์ฐฝ์— "๊ธฐ๋ก"์„ ์ž…๋ ฅ ํ›„, ์ธํ„ฐ๋„ท ์‚ฌ์šฉ ๊ธฐ๋ก ์‚ญ์ œ๋ฅผ ํ•ด์ค๋‹ˆ๋‹ค. => ์ด๋ž˜๋„ ์•ˆ ๋  ๋•Œ๋Š”, ๊ธฐ๊ฐ„์„ ๋Š˜๋ ค์„œ ๊ธฐ๋ก ์‚ญ์ œ ํ•ด์ฃผ๋ฉด ๋˜๋”๋ผ๊ตฌ์š”!๐Ÿ˜ 02. ๊ธ€์“ฐ๊ธฐ ๋ฒ„ํŠผ ๋‹จ์ถ•ํ‚ค Q Q (Shift + q) ๋ฅผ ๋ˆ„๋ฅด๋ฉด ๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€๋กœ ๋„˜์–ด์™€ ์ง‘๋‹ˆ๋‹ค โœจโœจ ๋ฐ”๋กœ ๊ธ€์“ฐ๊ธฐ ๊ฐ€๋Šฅ! ๐Ÿคฉ๐Ÿคฉ๐Ÿคฉ

[React/JS] ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ, ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๊ตฌํ˜„ํ•˜๊ธฐ (ํŒŒ์ผ ์„ ํƒ ๋ฒ„ํŠผ ์ œ๊ฑฐ, ์ปค์Šคํ…€ํ•˜๊ธฐ)

๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™์ด ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. 1. FileReader๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ์‹ 2. URL API๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ์‹ ๐ŸŒˆ (์ถ”์ฒœ) ๊ตฌํ˜„ํ•ด๋ด…์‹œ๋‹ค! 00. - ํŒŒ์ผ ์„ ํƒ ๋ฒ„ํŠผ ์ œ๊ฑฐ ์šฐ์„ , input type="file"์„ ์‚ฌ์šฉํ•ด์„œ, ์ด๋ฏธ์ง€๋ฅผ ํฌํ•จํ•˜์—ฌ ๋‹ค์–‘ํ•œ ํ™•์žฅ์ž ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค! ๐Ÿ˜ style={{ display: "none" }} ์„ ์ถ”๊ฐ€ํ•˜๋ฉด, ํŒŒ์ผ ์„ ํƒ ๋ฒ„ํŠผ์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. -> ์šฐ๋ฆฌ๊ฐ€ ๋”ฐ๋กœ ๋ฒ„ํŠผ์„ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ•ฉ์‹œ๋‹ค! 01. ํ™•์žฅ์ž ์„ค์ • ์ด๋ฏธ์ง€๋งŒ ์—…๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋„๋ก ์ œํ•œํ•˜๊ณ  ์‹ถ์œผ๋ฉด, accept="image/*" ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.โœจ 02. FileReader๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ์‹ - readAsDataURL /** ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ด๋ฏธ์ง€ url */ const [i..

[React/JS] input์—์„œ ํ•œ ๊ธ€์ž ์ž…๋ ฅ ํ›„ focus๋ฅผ ์žƒ๋Š” ํ˜„์ƒ

00. input์—์„œ ํ•œ ๊ธ€์ž ์ž…๋ ฅ ํ›„ focus๋ฅผ ์žƒ๋Š” ํ˜„์ƒ input ํƒœ๊ทธ์—์„œ ํ•œ ๊ธ€์ž๋ฅผ ์ž…๋ ฅํ•˜์ž๋งˆ์ž input์˜ focus๊ฐ€ ์‚ฌ๋ผ์ง€๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค... ๊ทธ๋Ÿฌ๋ฉด, ํ•œ ๊ธ€์ž ์น˜๊ณ  ๋‹ค์‹œ ์ž…๋ ฅ์ฐฝ ํด๋ฆญํ•˜๊ณ ,, ์น˜๊ณ  ํด๋ฆญํ•˜๊ณ ,,๋ฅผ ๋ฐ˜๋ณตํ•ด์•ผ ํ•ด์„œ ์ž…๋ ฅํ•˜๊ธฐ ๋งค์šฐ ๋ถˆํŽธํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ผญ ๊ณ ์ณ์•ผ ํ•œ๋‹ค!!! ์›์ธ์€ state์˜ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด ์ž…๋ ฅ๋œ Input์ด Re-render ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค..!! ๋ฌธ์ œ ์ฝ”๋“œ export default function InputTest() { const [name, setName] = useState(""); const onChange = (e) => { setName(e.target.value); } /** ์ด๋ ‡๊ฒŒ input์ด ํ•จ์ˆ˜ ๋‚ด์˜ ์ปดํฌ๋„ŒํŠธ๋กœ ๊ตฌํ˜„๋˜์—ˆ์„ ๋•Œ! */ const..

[React/JS] ๊ฐ์ฒด(Object)๋ฅผ ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€์— ์ €์žฅํ•˜๊ธฐ

๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€์— ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด์„ , ์ €์žฅํ•˜๋ ค๋Š” ๊ฐ์ฒด๋ฅผ string์œผ๋กœ ๋ณ€ํ™˜ ํ›„ ์ €์žฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€์— ์ €์žฅํ•ด๋†“์€ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„ , string์œผ๋กœ ์ €์žฅํ•ด๋†“์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•ด์•ผ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. 00. ์ €์žฅํ•˜๊ธฐ (object -> string) JSON.stringify /** ์ €์žฅํ•˜๋ ค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ object -> string ์œผ๋กœ ๋ณ€ํ™˜ */ const stringData = JSON.stringify(์ €์žฅํ•˜๋ ค๋Š” ์˜ค๋ธŒ์ ํŠธ); /** ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€์— ์ €์žฅ : string */ localStorage.setItem( ํ‚ค์ด๋ฆ„ , stringData); 01. ๊ฐ€์ ธ์˜ค๊ธฐ (string -> object) JSON.parse /** ๊ฐ€์ ธ์˜ค๋ ค๋Š” ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€ ๋ฐ์ดํ„ฐ : strin..

[React/JS] useNavigate๋กœ ์ƒˆ๋กœ ๊ณ ์นจ ๊ตฌํ˜„ - window.location.reload()

https://avoc-o-d.tistory.com/73?category=1069902 [React] useNavigate Hook์œผ๋กœ ํŽ˜์ด์ง€ ์ด๋™ํ•˜๊ธฐ(Hook ์ง์ ‘ ๋งŒ๋“ค๊ธฐ) React Hook๋Š” ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ ์ƒํƒœ๊ฐ’ ์ ‘๊ทผ๊ณผ ์ž์‹ ์š”์†Œ์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. ๋ฆฌ์•กํŠธ๋Š” useState, useEffect ๊ฐ™์€ ๋‚ด์žฅ Hook์„ ์ œ๊ณตํ•ด์ฃผ๋Š”๋ฐ, ์ด ์ค‘ useNavigate๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํŽ˜์ด์ง€๋ฅผ ์ด๋™ํ•ด๋ณผ๊ฒŒ avoc-o-d.tistory.com navigate๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ž‘์„ฑํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค! ๋งŒ์•ฝ A ํŽ˜์ด์ง€์—์„œ A ํŽ˜์ด์ง€๋กœ ๊ฐ”์„ ๋•Œ, ์ƒˆ๋กœ๊ณ ์นจ์ด ์ž‘๋™๋˜์–ด์•ผ ํ•  ๋•Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, โœจ๋ฉ”์ธ ํŽ˜์ด์ง€๋กœ ๊ฐ€๋Š” ๋กœ๊ณ โœจ๊ฐ€ ์žˆ๊ฒ ๋„ค์š”! ๋กœ๊ณ ๋ฅผ ๋ˆ„๋ฅด๋ฉด, ์ƒˆ๋กœ๊ณ ์นจ์ด ๋˜๋Š”..

[React/JS] ๋กœ์ปฌ image src ๊ฒฝ๋กœ ์—ฐ๊ฒฐํ•˜๊ธฐ(์ด๋ฏธ์ง€ ๊นจ์ง ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•)

public์— ๊ทธ๋ƒฅ ์ €์žฅ๋˜์–ด ์žˆ๋Š” ์ด๋ฏธ์ง€์— src์—ฐ๊ฒฐ์„ ํ•˜๋ฉด, navigate๋ฅผ ํ–ˆ์„ ๋•Œ ์ƒˆ๋กœ์šด ์ƒ๋Œ€๊ฒฝ๋กœ๋กœ ์ธ์‹์„ ํ•ด์„œ ์ด๋ฏธ์ง€๊ฐ€ ๊นจ์ง€๋Š” ํ˜„์ƒ์ด ์ผ์–ด๋‚˜๋”๋ผ๊ตฌ์š”.. ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. 00. public > assets assets ํด๋” ์ƒ์„ฑ ํ›„, ์ด ์•ˆ์— ์ด๋ฏธ์ง€ ํŒŒ์ผ์„ ๋„ฃ์–ด img ํƒœ๊ทธ src์— ์—ฐ๊ฒฐํ•ด์ค๋‹ˆ๋‹ค. A.jpg A.png ๋“ฑ๋“ฑ... ํ™•์žฅ์ž ๊ผญ ํ™•์ธํ•ด์ฃผ๋Š” ๊ฒƒ ์žŠ์ง€๋งˆ์„ธ์š”!

[React/JS] ๋กœ์ปฌ JSON ํŒŒ์ผ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ - ์›ํ•˜๋Š” ๊ฐ’ ์ ‘๊ทผํ•˜๊ธฐ

data.json { "jsonData": [ { "id": "A-001", "name": "A" }, { "id": "B-001", "name": "B" } ] } ์ด๋Ÿฐ ๋กœ์ปฌ json ํŒŒ์ผ์ด ์žˆ๋‹ค๊ณ  ํ•ฉ์‹œ๋‹ค. 00. ๋กœ์ปฌ JSON ํŒŒ์ผ์„ import๋ฌธ์œผ๋กœ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ A.js import data from "./json/data"; export default function A() { console.log("data : ", data); console.log("data.jsonData : ", data.jsonData); ... } import๋ฅผ ํ•˜๋ฉด JSON.parse ํ•จ์ˆ˜๊ฐ€ ์ ์šฉ๋œ ๊ฒƒ ์ฒ˜๋Ÿผ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. => ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ, ํ˜„์žฌ data.json ์•ˆ์— "jsonData" ์ด jsonData ์œผ๋กœ ์ ‘๊ทผ ๊ฐ€..

[React/JS] Firebase - ์ œํœด ID ๊ณต๊ธ‰์—…์ฒด(Google) ๋กœ๊ทธ์ธ/ํšŒ์›๊ฐ€์ž… ๊ตฌํ˜„ (๋กœ๊ทธ์ธํ•œ ์œ ์ €๊ฐ€ ์ฒ˜์Œ ๋กœ๊ทธ์ธํ•œ ์œ ์ €์ธ์ง€ ํ™•์ธ) getAdditionalUserInfo - isNewUser / signInWithPopup / deleteUser / signOut

๋กœ๊ทธ์ธ - ํšŒ์›๊ฐ€์ž… ํ•œ ์œ ์ €๋งŒ ๋กœ๊ทธ์ธ ๊ฐ€๋Šฅํ•˜๋„๋ก ๊ตฌํ˜„, ๊ตฌ๊ธ€ ์ตœ์ดˆ ๋กœ๊ทธ์ธ์„ ๋ง‰์•„์•ผ ํ•จ ํšŒ์›๊ฐ€์ž… - ์ด๋ฏธ ํšŒ์›๊ฐ€์ž… ํ•œ ์œ ์ €๋Š” ํšŒ์›๊ฐ€์ž… ๋ง‰์•„์•ผ ํ•จ, ๊ตฌ๊ธ€ ์ตœ์ดˆ ๋กœ๊ทธ์ธ์„ ํ—ˆ์šฉ ์œ„์™€ ๊ฐ™์ด ํ•ด์•ผ ํ•˜๋Š” ์ด์œ ๋ฅผ ์ž ๊น ์‚ดํŽด๋ณผ๊ฒŒ์š”. https://avoc-o-d.tistory.com/50?category=1069902 [React] Firebase - Authentication์œผ๋กœ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ ๊ตฌํ˜„ํ•˜๊ธฐ https://firebase.google.com/?hl=ko&gclid=CjwKCAjwpqCZBhAbEiwAa7pXeX-_LGJVKKRu3WA1Zbs-awSKivk12siAqSNzd60QEYrX7TKbOp59MxoCHK0QAvD_BwE&gclsrc=aw.ds Firebase Firebase๋Š” ๊ณ ํ’ˆ์งˆ ์•ฑ์„ ๋น ๋ฅด๊ฒŒ ๊ฐœ๋ฐœํ•˜๊ณ ..

[React/JS] ์›น์‚ฌ์ดํŠธ์˜ ๋งจ ์ฒ˜์Œ url ์„ค์ •ํ•˜๊ธฐ, ์‹œ์ž‘ ํŽ˜์ด์ง€ url

๋ณดํ†ต, ์ฒ˜์Œ ์ ‘์† ์‹œ์—” "/" ์œผ๋กœ ๋“ค์–ด์˜ค๊ฒŒ ๋˜์ฃ ! ๋งจ ์ฒ˜์Œ ์›น์‚ฌ์ดํŠธ์— ์ ‘์†ํ–ˆ์„ ๋•Œ, "/main" ์œผ๋กœ ๋“ค์–ด์˜ค๋„๋ก ๊ตฌํ˜„ํ•ด๋ณผ๊ฒŒ์š”! 00. Route path = "*" Router.js ์ค‘... ... {/* ์œ„ route ๋“ค ์ค‘ ๋งค์นญ ์•ˆ ๋˜๋Š” ๊ณณ ์žˆ์œผ๋ฉด ์„ ๋ Œ๋” */} Main.js import * as React from "react"; export default function Main() { return ( Main Page ); } ์œ„์™€ ๊ฐ™์ด, path="*"๋Š” ์œ„ ๋“ค ์ค‘ url์ด ๋งค์นญ ์•ˆ ๋˜๋Š” ๊ณณ์ด ์žˆ์œผ๋ฉด main์œผ๋กœ ๊ฐ€๋„๋ก element์— ์„ ๋„ฃ์–ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์—๊ฒŒ ๋งค์นญ์ด ์•ˆ ๋˜๋Š” ๊ณณ์ด๋ผํ•จ์€ "/" ์ด ์žˆ๊ฒ ์ฃ !! 01. useNavigate()๋ฅผ ์ด์šฉํ•˜์—ฌ ์‹œ์ž‘ url์„ /main์œผ๋กœ Mai..