๋ฐ˜์‘ํ˜•

๊ฐœ๋ฐœ ๐Ÿพ/ReactJS 19

Axios ๋กœ ํŒŒ์ผ๊ณผ JSON ํŒŒ์ผ ๋™์‹œ์— ๋„˜๊ธฐ๊ธฐ

๋ณดํ†ต ํŒŒ์ผ ์—…๋กœ๋“œ๋ฅผ ๊ตฌํ˜„ํ• ๋•Œ Event ๋กœ ํŒŒ์ผ์„ ๋ฐ›์€ ํ›„ formData์— ๋‹ด์•„์„œ multipart ๋กœ ๋ณด๋‚ธ๋‹ค. const files = e.target.files; const formData = new FormData(); for (let file of files) formData.append('file', file); // ํ˜น์€ formData.append('file', file[0]); ๊ฐ„ํ˜น ํŒŒ์ผ ์ด์™ธ์— ์ถ”๊ฐ€ ์ •๋ณด๋ฅผ ๋ณด๋‚ผ๋•Œ๊ฐ€ ์žˆ๋Š”๋ฐ, ๊ทธ๋•Œ์—๋„ formData๋ฅผ ๋‹ด์•„์„œ ๋ณด๋‚ด๋ฉด ๋œ๋‹ค. ... const fileInfo = "user_type"; formData.append('type', fileInfo); ๊ทธ๋Ÿฐ๋ฐ ๋งŒ์•ฝ Object ํƒ€์ž…์„ ๋ณด๋‚ด์•ผํ•  ๋•Œ๋Š” ์–ด๋–จ๊นŒ? ๊ธฐ๋‚˜๊ธด ์‚ฝ์งˆ+๋„์›€ ๋์— ์ฐพ์€ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ..

[React, css] textarea ์‚ฌ์šฉ์‹œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ฒ˜๋ฆฌ

๋‹ค์–‘ํ•œ ์ž…๋ ฅํผ์„ ๋‹ค๋ฃฐ๋•Œ input๋ง๊ณ ๋„ textarea๋„ ์ƒ๋‹นํžˆ ๋งŽ์ด ๋‹ค๋ฃจ๋Š” ํŽธ์ธ๋ฐ, textarea๋„ input๊ณผ ๋ณ„๊ฐœ๋กœ ์€๊ทผํžˆ ๋งŽ์€ ์ปค์Šคํ…€์„ ํ•ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ textarea ๊ฐ™์€ ๊ฒฝ์šฐ resize ์˜ต์…˜์ด ๊ธฐ๋ณธ์œผ๋กœ ๋“ค์–ด๊ฐ€ ์žˆ๊ณ , input๊ณผ ๋‹ฌ๋ฆฌ textarea ๋Š” ์—ฌ๋Ÿฌ ์ค„์˜ ๊ธ€์„ ๊ธธ๊ฒŒ ์ž…๋ ฅํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์—, ์ถœ๋ ฅ์‹œ์—๋„ ๋”ฐ๋กœ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ค˜์•ผํ•ฉ๋‹ˆ๋‹ค. 1. textarea resize ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ 2. textarea placeholder ์—์„œ ์ค„๋ฐ”๊ฟˆ ์ฒ˜๋ฆฌํ•˜๊ธฐ 3. textarea ์—์„œ tab ์‚ฌ์šฉํ•˜๊ธฐ 1. ๊ธฐ๋ณธ ์†Œ์Šค - JSX import { useState } from 'react' import './app.css' function App() { const [textValue, setText..

props๋กœ ์ „๋‹ฌ๋˜๋Š” ํ…์ŠคํŠธ ๋ผ์ธ ์ค„๋ฐ”๊ฟˆ ์ฒ˜๋ฆฌ๋Š” 2๊ฐ€์ง€ ๋ฐฉ๋ฒ• !

๊ฐœ๋ฐœ์„ ํ•˜๋‹ค ๋ณด๋ฉด props๋กœ ์ „๋‹ฌ๋ฐ›์€ ํ…์ŠคํŠธ์˜ ์ค„ ๋ฐ”๊ฟˆ์„ ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ข…์ข… ์žˆ์Šต๋‹ˆ๋‹ค. ๋งค๋ฒˆ ๊นŒ๋จน์œผ๋‹ˆ ์ •๋ฆฌํ•ด ๋†“์œผ๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ˜‘ ๋จผ์ € ํ…์ŠคํŠธ๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ๋ฟŒ๋ ค์ฃผ๋Š” ์ดˆ ๊ฐ„๋‹จ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. const Item = ({ text }) => { return {text}; }; export default function App() { return ( ); } ์—ฌ๊ธฐ์—์„œ text์— ์ค„๋ฐ”๊ฟˆ์ด ๋“ค์–ด๊ฐ„ ํ…์ŠคํŠธ๋ฅผ ์ž…๋ ฅํ•˜๋ ค๊ณ  ํ•  ๋•Œ ์•„๋งˆ brํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ '\n'๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ค„๋ฐ”๊ฟˆ์„ ์‹œ๋„ํ•˜์‹ค ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์˜ˆ์ƒ๊ณผ๋Š” ๋‹ฌ๋ฆฌ ๊ทธ๋Œ€๋กœ ์ถœ๋ ฅํ•ด ๋ณด๋ฉด ๋ฌธ์ž๋กœ ์ถœ๋ ฅ๋ผ ๋ฒ„๋ฆฌ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์™œ ์ด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋Š” ๊ฑธ๊นŒ์š”? ๐Ÿ˜ฎ ์ด๋ฆฌ์ €๋ฆฌ ํ…Œ์ŠคํŠธ ํ•ด๋ณธ ๊ฒฐ๊ณผ value์˜ ๊ฐ’์ด String๊ณผ ์„ž์ด๊ฒŒ ..

Toast ํŒ์—… ๋งŒ๋“ค๊ธฐ

Toast ํŒ์—…์€ ๋ฌด์–ธ๊ฐ€ ์•ก์…˜์„ ์‹œ์ž‘ํ–ˆ์„ ๋•Œ, ์ข…๋ฃŒ๋˜์—ˆ์„ ๋•Œ, ์ƒํƒœ๊ฐ€ ๋ฐ”๋€Œ์—ˆ์„ ๋•Œ ๋“ฑ๋“ฑ์˜ ๊ฒฝ์šฐ ์•Œ๋ ค์ฃผ๋Š” ํŒ์—…์ž…๋‹ˆ๋‹ค. ๋”ฐ๋กœ ๋‹ซ๊ธฐ ๋ฒ„ํŠผ์„ ๋‘์ง€ ์•Š๊ณ  ์ผ์ • ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ์ž๋™์œผ๋กœ ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค. JavasScriptํ™˜๊ฒฝ์—์„œ setTimeout์„ ํ†ตํ•ด ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. // App.js import { useState, useEffect } from "react"; import "./styles.css"; export default function App() { return ( CLICK ); } // Toast.js export default function Toast({ msg = "๋ฉ”์„ธ์ง€ ์—†์Œ" }) { return {msg}; } // styles.css .App { font-family: san..

์ดˆ๊ฐ„๋‹จ useContext + useReducer

useContext์—์„œ useReducer๋ฅผ ํ†ตํ•ด redux์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•ด ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋Šฅ์€ ๊ฐ„๋‹จํ•˜๊ฒŒ admin์ด๋ผ๋Š” state๋ฅผ ๊ฐ€์ง€๊ณ  true์ผ ๋•Œ false์ผ ๋•Œ ๋ฌธ๊ตฌ๋งŒ ๋‹ค๋ฅด๊ฒŒ ์ถœ๋ ฅํ•˜๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์˜ˆ์ „์— useContext๊ฐ€ redux๋ฅผ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์„ ๋งŒํผ ํŽธ๋ฆฌํ•˜๋‹ค๊ณ  ํ•˜์—ฌ ์ž‘์€ ํ”„๋กœ์ ํŠธ ํ•˜๋‚˜๋ฅผ redux๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  useContex๋งŒ ์‚ฌ์šฉํ•ด์„œ ๋งŒ๋“ค์–ด๋ณธ ์ ์ด ์žˆ๋‹ค. ๋จผ์ € context๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. import { createContext, useReducer } from "react"; // reducer const initialState = { admin: false } const reducer = (state, action) => { switch(action.type) { cas..

React ์—์„œ useRef ์‚ฌ์šฉํ•˜๊ธฐ

์ฐธ์กฐ: https://ko.reactjs.org/docs/hooks-reference.html#useref useRef๋Š” ์ƒ๊ฐ๋ณด๋‹ค ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. SPA์—์„œ๋Š” ๋ณ€ํ™”์— ๋”ฐ๋ฅธ ๋ Œ๋”๋ง์œผ๋กœ ๊ฐ์ฒด์— ์ง์ ‘ ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์€ ์œ„ํ—˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— React์—์„œ๋Š” useRef hook์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. useRef๊ฐ€ ์ง์ ‘ ๊ฐ์ฒด์— ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ์ด์œ ๋Š” ๋งค๋ฒˆ ๋ Œ๋”๋ง์„ ํ•  ๋•Œ๋งˆ๋‹ค ๋™์ผํ•œ ๊ฐ์ฒด๋ฅผ ์ œ๊ณตํ•œ๋‹ค๊ณ  ๊ณต์‹๋ฌธ์„œ์— ๋‚˜์™€์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด, state์™€๋Š” ๋‹ฌ๋ฆฌ ์‹ค์‹œ๊ฐ„ ๋ณ€ํ™”๋ฅผ ๊ฐ์ง€ํ•˜์—ฌ ๋ณ€ํ™”๋œ ๊ฐ’์„ ๋ฆฌํ„ดํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ์ด๊ฒŒ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋ ค๋ฉด ref๋ฅผ ๋”ฐ๋กœ setStateํ•ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. 1. useRef๋ฅผ ํ†ตํ•œ timer๋งŒ๋“ค๊ธฐ ์ฐธ์กฐ : https://dmitripavlutin.com/react-useref-guide/ ํƒ€์ด..

React ์—์„œ ์• ๋‹ˆ๋ฉ”์ด์…˜, ์ธํ„ฐ๋ ‰์…˜ ๊ตฌ์ถ•ํ•˜๊ธฐ (emotion / tweenmax)

1. emotion keyframes ์‚ฌ์šฉํ•˜๊ธฐ ์ฐธ์กฐ์‚ฌ์ดํŠธ https://www.npmjs.com/package/@emotion/react https://emotion.sh/docs/keyframes emotion/react ์—์„œ๋Š” keyframes๋ฅผ ํ†ตํ•˜์—ฌ ๊ธฐ์กด CSS์—์„œ ์‚ฌ์šฉํ•˜์˜€๋˜ ์• ๋‹ˆ๋ฉ”์ด์…˜ keyframe์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋จผ์ € ์„ค์น˜๋ฅผ ํ•ฉ๋‹ˆ๋‹ค. yarn add @emotion/react ๊ฐ„๋‹จํ•œ ์‚ฌ์šฉ๋ฒ• ๋ฐ ๋Ÿฐํƒ€์ž„์—๋Ÿฌ๊ฐ€ ๋‚œ๋‹ค๋ฉด ์—ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”. ์•„์ฃผ ์‹ฌํ”Œํ•œ floating ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋งŒ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋จผ์ € keyframes๋ฅผ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค. floating ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋งŒ๋“ค๊ณ , ์Šคํƒ€์ผ์— ๋„ฃ์–ด์ค๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•œ ์„ธํŒ…๋งŒ์œผ๋กœ ๊ธฐ์กด์— ์“ฐ๋˜ CSS๋Œ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋‹ˆ ์•„์ฃผ ํŽธํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋”ฐ๋กœ ๋ถ„๋ฆฌํ•ด..

react draggable ๊ฐ„๋‹จ ์ƒ˜ํ”Œ

react-draggable : https://www.npmjs.com/package/react-draggable react-draggable React draggable component www.npmjs.com ๊ฐ์ฒด๋ฅผ ์ž์œ ๋กญ๊ฒŒ ๋“œ๋ž˜๊ทธํ•˜๋Š” ๋ชจ์…˜์„ ์ฐพ๋‹ค๊ฐ€ ์ง์ ‘ ๊ตฌํ˜„๋„ ํ•ด๋ณด์•˜์ง€๋งŒ ๋ Œ๋”ํ•˜๋Š” ๊ณผ์ •์—์„œ buffer๊ฐ€ ์ƒ๊ธฐ๋Š”๊ฒƒ ๊ฐ™์•„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฐพ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์•„์ฃผ ์‰ฝ๊ณ  ๊ฐ„๋‹จํ•œ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ž…๋‹ˆ๋‹ค. 1. ์„ค์น˜ npm install react-draggable 2. ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ๋ฐ ์ ์šฉ import Draggable from "react-draggable"; export default function App() { const [position, setPosition] = useState({ x: 0, ..

๋ฆฌ์•กํŠธ์—์„œ setInterval์„ ์‚ฌ์šฉํ•˜์—ฌ ํƒ€์ดํ•‘ ํšจ๊ณผ ์ฃผ๊ธฐ

๋ฆฌ์•กํŠธ์—์„œ ํƒ€์ดํ•‘ ํšจ๊ณผ๋ฅผ ์ฃผ๊ณ  ์‹ถ์–ด ์•Œ์•„ ๋ณด์•˜๋”๋‹ˆ react-typing-effect๊ณผ ๊ฐ™์€ ์—ฌ๋Ÿฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ, ์ €๋Š” ์ข€ ๋” ์ธ๊ณต์ง€๋Šฅ ์Šคํ”ผ์ปค๊ฐ€ ๋งํ•˜๋Š” ๋Š๋‚Œ์„ ์ฃผ๊ณ  ์‹ถ๊ธฐ๋„ ํ–ˆ๊ณ , ๊ตฌํ˜„ํ•˜๊ธฐ ์–ด๋ ต์ง€ ์•Š์„ ๊ฒƒ ๊ฐ™์•„์„œ ๋งŒ๋“ค์–ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ๊ธฐ๋Šฅ 1. ๋ฟŒ๋ฆด ํ…์ŠคํŠธ ์ค€๋น„ 2. ๋ฟŒ๋ฆด ํ…์ŠคํŠธ (state) 3. ํ…์ŠคํŠธ ๊ธธ์ด ์ฒดํฌ (state) import React, { useState, useEffect } from 'react' const TypingText = () => { const txt = "์˜ค๋Š˜์€ ๋ญ ๋จน์ง€?"; const [Text, setText] = useState(''); const [Count, setCount] = useState(0); return ( { Text } ) } export d..

React ์—์„œ select ์‚ฌ์šฉํ•˜๊ธฐ

์…€๋ ‰ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด jsx ๊ตฌ๋ฌธ์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. 0.1ํ†ค 0.2ํ†ค 0.3ํ†ค 0.4ํ†ค {/* ์„ ํƒํ•˜๋ ค๋˜ ๋ถ€๋ถ„! */} 0.5ํ†ค ๊ธฐ์กด html ์—์„œ ๋””ํดํŠธ ์˜ต์…˜์„ ์„ ํƒํ•˜๋ ค๋ฉด option ํƒœ๊ทธ์•ˆ์— selected ์†์„ฑ์„ ์ฃผ์–ด ๋™์ž‘ ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ฆฌ์•กํŠธ์—์„œ ์ด์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•œ๋‹ค๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—๋Ÿฌ๋ฅผ ๋ฑ‰์–ด๋ƒ…๋‹ˆ๋‹ค. React์—์„œ๋Š” selected ๋Œ€์‹  value๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ selected์˜ ์„ ํƒ๋œ value ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋ ค๋ฉด, onChange๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์œ„์˜ ์†Œ์Šค๋ฅผ ์ˆ˜์ •ํ•ด ๋ณด๋ฉด ์ด๋ ‡์Šต๋‹ˆ๋‹ค. 0.1ํ†ค 0.2ํ†ค 0.3ํ†ค 0.4ํ†ค 0.5ํ†ค ์œ„์˜ ๋‚ด์šฉ์œผ๋กœ๋„ ์†Œ์Šค๋ฅผ ์ ์šฉํ•˜๊ธฐ ์–ด๋ ต๋‹ค๋ฉด ์•„๋ž˜์˜ ๋‚ด์šฉ์„ ๋ด์ฃผ์„ธ์š”! export default function App() { const sel..

๋ฐ˜์‘ํ˜•