๋ฐ˜์‘ํ˜•

๊ฐœ๋ฐœ ๐Ÿพ 64

์ดˆ๊ฐ„๋‹จ 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..

Node ๊ธฐ๋ฐ˜ SASS ์ž…๋ฌธํ•˜๊ธฐ

์˜ค๋žœ๋งŒ์— html, css, javascript๋กœ ์ฝ”๋”ฉ์„ ํ•ด์•ผ ํ•˜๋‹ค ๋ณด๋‹ˆ, ์˜ ๊ธฐ์กด์ฒ˜๋Ÿผ ํ•˜๊ธฐ์—๋Š” ๊ท€์ฐจ๋‹ˆ์ฆ˜์ด ์ƒ๊ฒจ๋ฒ„๋ ธ์Šต๋‹ˆ๋‹ค. ๐Ÿ˜… ๊ทธ๋™์•ˆ์€ ๋”ฑํžˆ ๊ด€์‹ฌ ๊ฐ–์„ ๋งŒํ•œ ์ผ์€ ์—†์—ˆ์œผ๋‚˜ ๊ท€์ฐฎ์€ ๊ฑด ๋„ˆ๋ฌด ์‹ซ์œผ๋‹ˆ ์—†๋˜ ๊ด€์‹ฌ์ด ์ƒ๊ธฐ๊ฒŒ ๋˜๋ฉด์„œ ์ด๋ฒˆ ๊ธฐํšŒ์— ์ž…๋ฌธํ•ด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ณต์‹๋ฌธ์„œ๋ฅผ ๋ณด๊ณ  ํ•˜๋‚˜์”ฉ ๋”ฐ๋ผํ•˜๊ฑฐ๋‚˜ ๊ฐ•์˜๋ฅผ ๋ณด๊ณ  ๊ณต๋ถ€ํ•ด๋„ ์ข‹์ง€๋งŒ, ์ „๋ฐ˜์ ์œผ๋กœ ํ•œ ๋ฒˆ ์งง๊ฒŒ ๊ฒ‰ํ•ฅ๊ธฐ ์‹์œผ๋กœ ์ž‘์„ฑํ•ด๋ณด๊ณ  ๊ฐ•์˜๋ฅผ ๋“ค์œผ๋ฉด ์ดํ•ดํ•˜๋Š”๋ฐ ์ข€ ๋” ๋„์›€์ด ๋˜์ง€ ์•Š์„๊นŒ ์‹ถ์Šต๋‹ˆ๋‹ค. ์ฐธ์กฐ: https://sass-lang.com/ 1. ํ™˜๊ฒฝ์„ธํŒ… ๊ทธ๋Ÿด ๋ฆฌ ์—†๊ฒ ์ง€๋งŒ node๊ฐ€ ์—†๋‹ค๋ฉด ์„ค์น˜ ๊ธฐ์กด ๋ฒ„์ „(node-sass, libsass)๋Š” ํ์ง€๋˜์—ˆ๋‹ค๊ณ  ํ•˜๋‹ˆ Dart Sass๋ฅผ ์‚ฌ์šฉํ•˜๋ผ๊ณ  ํ•˜๋„ค์š”. npm install -g sass // ๋งŒ์•ฝ ์จ๋ณด๊ณ  ๋‹ค์‹œ ์‚ญ์ œํ•˜๊ณ  ์‹ถ๋‹ค..

javascript ์Šคํฌ๋กค ์ƒํƒœ๋ฐ” ๋งŒ๋“ค๊ธฐ (window / div)

์Šคํฌ๋กค์„ ํ•จ์— ๋”ฐ๋ผ ์ƒํƒœ๋ฐ”๊ฐ€ ์Šคํฌ๋กค ์œ„์น˜์— ๋”ฐ๋ผ ๋ณ€๊ฒฝ๋˜๋ฉฐ ์ƒํƒœ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์Šคํฌ๋กค ํ”„๋กœ๊ทธ๋ ˆ์Šค ๋ฐ”๋ฅผ ๋งŒ๋“ค์–ด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์ƒ๊ฐ๋ณด๋‹ค ๊ฐ„๋‹จํ•ด์„œ ๊ณต์œ ํ•ด๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ์šฐ์„  ๋งˆํฌ์—…์„ ํ•ฉ๋‹ˆ๋‹ค. ๋ณดํ†ต์€ window ์Šคํฌ๋กค์„ ๋งŽ์ด ์‚ฌ์šฉํ•˜์ง€๋งŒ ์ €๋Š” div์— ์Šคํฌ๋กค์„ ์ฃผ๊ณ  ์ ์šฉํ•ด ๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. // index.html 0% { ...contents } // style.css html, body, .wrap { width: 100%; height: 100%; overflow: hidden; } .wrap { position: relative; overflow-y: auto; padding-top: 13px; } .barWrap { position: fixed; top: 0; left: 0; width: 100%; height:..

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/ ํƒ€์ด..

CSS์—์„œ ๋ณ€์ˆ˜ ์‚ฌ์šฉํ•˜๊ธฐ

์ฐธ์กฐ : https://developer.mozilla.org/ko/docs/Web/CSS/Using_CSS_custom_properties IE์—์„œ๋Š” ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ง€์›์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ๋„์™€์ฃผ๋Š”css-var-ponyfill์ด๋ผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ๊ธดํ•œ๋ฐ, ์•„๋ฌด๋ฆฌ ์„ค์ •ํ•ด๋„ ํ•ด๊ฒฐ์ฑ…์„ ๋ชป ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. ์ข€ ๋” ํŒŒ๋ณด๊ณ  ํ•ด๊ฒฐ์ฑ…์ด ๋‚˜์˜ค๋ฉด ์ถ”ํ›„ ํฌ์ŠคํŒ…ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. element์™€ root์—์„œ ์„ ์–ธํ•จ์œผ๋กœ์จ ์Šค์ฝ”ํ”„(scope)๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. element์—์„œ ์ง€์ •๋œ ๋ณ€์ˆ˜๋Š” ํ•ด๋‹น element๊ฐ€ ๋ถ€๋ชจ๊ฐ€ ์•„๋‹ˆ๋ฉด ์ ์šฉ์ด ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. :root { --box-size: 50px; } .box1 { --main-color: orange; } :root๋Š” ์ „์—ญ์„ ๋œปํ•˜๊ณ . box1 ์€. box1์„ ํฌํ•จํ•œ ํ•˜์œ„ ele..

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, ..

Error] findDOMNode is deprecated in StrictMode

1. ์—๋Ÿฌ ๋ฐœ์ƒ ์›์ธ react-draggable์„ ์“ธ ์ผ์ด ์ƒ๊ฒจ์„œ ์‚ฌ์šฉํ•˜๋˜ ์ค‘, ๋™์ž‘์€ ์ œ๋Œ€๋กœ ์ž‘๋™ํ–ˆ์œผ๋‚˜ ์ฝ˜์†”์— ์—๋Ÿฌ๊ฐ€ ๋–ด๋‹ค. ๋ณด๋‹ค์‹œํ”ผ findDOMNode ๋Š” StrictMode์—์„œ ์ œ๊ฑฐ๋˜์—ˆ๋‹ค๋Š” ๋‚ด์šฉ์ด๋‹ค. StricMode๋Š” React16์—์„œ ์ถ”๊ฐ€๋œ ๋ชจ๋“œ๋กœ ์ƒ๋ช…์ฃผ๊ธฐ์— ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ณ ์ž ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค. ์ฐธ์กฐ : https://ko.reactjs.org/docs/strict-mode.html Strict ๋ชจ๋“œ – React A JavaScript library for building user interfaces ko.reactjs.org react-draggable ๊ฐ™์€ ๊ฒฝ์šฐ ์ง์ ‘ ๊ฐœ์ฒด๋ฅผ ์ปจํŠธ๋กคํ•˜๋‹ค ๋ณด๋‹ˆ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์ธ ๊ฒƒ ๊ฐ™๋‹ค. 2. ํ•ด๊ฒฐ์ฑ… 2-1. StrictMode ํ•ด์ œ ..

๋ฆฌ์•กํŠธ์—์„œ 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..

select ํƒœ๊ทธ ์ปค์Šคํ…€ ํ•˜๊ธฐ, ํ˜น์€ ์ง์ ‘ ๋งŒ๋“ค๊ธฐ (feat. javascript)

1. Select CSS Customizing Select ํƒœ๊ทธ์˜ ์™ธํ˜•์€ ์ฃผ๋กœ ๊ฐ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ •์˜ ํ•ฉ๋‹ˆ๋‹ค. ๋ณด๋‹ค ์‹œํ”ผ ํฌ๋กฌ(์™ผ์ชฝ), IE(์˜ค๋ฅธ์ชฝ) ์ด ๋˜‘๊ฐ™์ด ๋ณด์ด๋ฉด์„œ๋„ ๋ฏธ์„ธ ํ•˜๊ฒŒ ๋‹ค๋ฆ„๋‹ˆ๋‹ค. ๊ณตํ†ต์ ์œผ๋กœ ๋‘˜ ๋‹ค ๊ทธ๋ฆฌ ์˜ˆ์˜๊ฒŒ ์ƒ๊ธฐ์ง„ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๊ฐ ํ”„๋กœ์ ํŠธ ๋ณ„๋กœ ์Šคํƒ€์ผ์— ๋งž๊ฒŒ css๋ฅผ ํ†ตํ•ด ์™ธํ˜•์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์ด์ฆˆ๋‚˜ ํฐํŠธ ์ปฌ๋Ÿฌ ๋“ฑ์€ ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ์ผ๋ถ€ ์ œํ•œ์ ์œผ๋กœ ํ†ต์ œ๋˜๊ธฐ ๋•Œ๋ฌธ์— (ํ™”์‚ดํ‘œ ์ด๋ฏธ์ง€ ๋“ฑ) ์•ฝ๊ฐ„์˜ ํŽธ๋ฒ•(?)์„ ํ†ตํ•˜์—ฌ ์™ธํ˜•์„ ๋ณ€๊ฒฝ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 1-1. Select ๊ธฐ๋ณธ ํ™”์‚ดํ‘œ ์—†์• ๊ธฐ fruits ๐ŸŠ apple orange grape melon /* IE */ select::-ms-expand { display: none; } .select { -o-appearance: none; ..

๋ฐ˜์‘ํ˜•