๋ฐ˜์‘ํ˜•

์ „์ฒด๋ณด๊ธฐ 26

firefox์—์„œ ๋นˆํ™”๋ฉด์œผ๋กœ ๋ณด์—ฌ์š”!

[ ๋ฒ„๊ทธ ๋ฐœ์ƒ ] firefox ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋นˆํ™”๋ฉด์œผ๋กœ ๋ณด์ธ๋‹ค๋Š” ์—ฐ๋ฝ์„ ๋ฐ›์•˜๋‹ค. [ ํ˜„ํ™ฉ ํŒŒ์•… ] ์ƒํ™ฉ์„ ํŒ๋‹จํ•ด๋ณด๋‹ˆ ๋‹ค์Œ๊ณผ ๊ฐ™์•˜๋‹ค. chrome, safari์—์„œ๋Š” ์ •์ƒ์ ์œผ๋กœ ํ‘œ์‹œ๋˜๊ณ  ์žˆ์Œ. firefox์—์„œ๋Š” ๋นˆํ™”๋ฉด์œผ๋กœ ํ‘œ์‹œ๋˜๊ณ  ์žˆ์—ˆ์œผ๋ฉฐ, ์ฝ˜์†”์— "This page is in Quirks Mode. Page layout may be impacted. For Standards Mode use “”. ๋ฉ”์„ธ์ง€๊ฐ€ ํ‘œ์‹œ๋จ. index.html์ด 403์œผ๋กœ ๋ฐ˜ํ™˜๋จ. ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ์›น ํŽ˜์ด์ง€๋ฅผ ๋ Œ๋”๋ง ํ•  ๋•Œ, DOCTYPE์„ ํ•ด์„ํ•ด์„œ ํ‘œ์ค€ ๋ชจ๋“œ์ธ์ง€, ์ฟผ๋“œ ๋ชจ๋“œ์ธ์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š”๋ฐ index.html์ด ์ •์ƒ์ ์œผ๋กœ ๋ฐ˜ํ™˜๋˜๊ณ  ์žˆ์ง€ ์•Š์€ ์ƒํƒœ์—ฌ์„œ DOCTYPE์ด ์„ ์–ธ๋˜์ง€ ์•Š์€ ์ฟผํฌ ๋ชจ๋“œ๋กœ ํŒ๋‹จํ•˜๊ณ  ์žˆ์—ˆ๋‹ค. (์ฐธ๊ณ ๋กœ ์šฐ๋ฆฌ์ชฝ ..

Trouble-Shooting 2024.03.01

Angular vs React | ์ƒ๋ช…์ฃผ๊ธฐ ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•ด์„œ

๊ณตํ†ต์  1. ์ดˆ๊ธฐํ™” ๋‹จ๊ณ„ ๋‘ ํ”„๋ ˆ์ž„์›Œํฌ ๋ชจ๋‘ ์ปดํฌ๋„ŒํŠธ ์ดˆ๊ธฐํ™” ๋‹จ๊ณ„์—์„œ ํŠน์ • ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค. Angular : ngOnInit React : constructor, componentDidMount 2. ์†Œ๋ฉธ ๋‹จ๊ณ„ ๋‘ ํ”„๋ ˆ์ž„์›Œํฌ ๋ชจ๋‘ ์ปดํฌ๋„ŒํŠธ ์†Œ๋ฉธ ๋‹จ๊ณ„์—์„œ ํŠน์ • ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค. Angular : ngOnDestroy React : componentWillUnmount ์ฐจ์ด์  1. ๋ณ€๊ฒฝ ๊ฐ์ง€ (Change Detection) Angular ๋ณ€๊ฒฝ ๊ฐ์ง€ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๋‚ด๋ถ€์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค. ์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ๋‚˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค Angular๋Š” ์ปดํฌ๋„ŒํŠธ์˜ ๋ทฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•œ๋‹ค. ex) ngOnChanges, ngDoCheck React Virtual DOM์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€๊ฒฝ ๊ฐ์ง€๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ๋‚˜ ์†์„ฑ..

React | ๋ Œ๋”๋ง ์ฃผ๊ธฐ - ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋‹จ๊ณ„ (Error Handling)

์—๋Ÿฌ ๊ฒฝ๊ณ„ (Error Boundary) React ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ปดํฌ๋„ŒํŠธ ํŠธ๋ฆฌ ํ•˜์œ„์—์„œ ๋ฐœ์ƒํ•œ ์—๋Ÿฌ๋ฅผ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ์ด๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํŠน์ • ๋ถ€๋ถ„์—์„œ ๋ฐœ์ƒํ•œ ์—๋Ÿฌ๋ฅผ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ตœ์ƒ์œ„์—์„œ ์‚ฌ์šฉ๋œ๋‹ค. ํ•„์š”์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์—๋Ÿฌ ๊ฒฝ๊ณ„๋ฅผ ์ค‘์ฒฉํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์—ฌ๋Ÿฌ ์—๋Ÿฌ๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ์ฒ˜๋ฆฌ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ผ๋ถ€์—์„œ ๋ฐœ์ƒํ•œ ์—๋Ÿฌ๋กœ ์ „์ฒด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ Œ๋”๋ง์ด ์ค‘๋‹จ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ ํ•  ์ˆ˜ ์žˆ๋‹ค. static getDerivedStateFromError() ์ž์‹ ์ปดํฌ๋„ŒํŠธ์—์„œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ํ˜ธ์ถœ ๋˜๋Š” ์ •์  ๋ฉ”์„œ๋“œ์ด๋‹ค. ์—๋Ÿฌ ์ƒํƒœ๋ฅผ ์ปดํฌ๋„ŒํŠธ์— ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ๋‹ค. componentDidCatch() ์ƒ๋ช…์ฃผ๊ธฐ ๋ฉ”์„œ๋“œ ์ค‘ ํ•˜๋‚˜ ์ž์‹ ์ปดํฌ๋„ŒํŠธ์—์„œ..

Frontend/React 2023.12.05

React | ๋ Œ๋”๋ง ์ฃผ๊ธฐ - ์ œ๊ฑฐ ๋‹จ๊ณ„ (Unmounting)

componentWillUnmount() ์ƒ๋ช…์ฃผ๊ธฐ ๋ฉ”์„œ๋“œ ์ค‘ ํ•˜๋‚˜ ์ปดํฌ๋„ŒํŠธ๊ฐ€ DOM์—์„œ ์–ธ๋งˆ์šดํŠธ(์ œ๊ฑฐ) ๋˜๊ธฐ ์ „์— ํ˜ธ์ถœ๋œ๋‹ค. ๋ฆฌ์†Œ์Šค ํ•ด์ œ, ํƒ€์ด๋จธ ์ œ๊ฑฐ, ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ ํ•ด์ œ ๋“ฑ ์ปดํฌ๋„ŒํŠธ ์ •๋ฆฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์žˆ๋‹ค. import React, { Component } from 'react'; class MyComponent extends Component { constructor(props) { super(props); this.state = { timerId: null, }; } componentDidMount() { // ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋งˆ์šดํŠธ๋œ ํ›„์— ํƒ€์ด๋จธ๋ฅผ ์„ค์ • const timerId = setInterval(() => { console.log('Timer is ticking...'); }, 1000..

Frontend/React 2023.12.04

React | ๋ Œ๋”๋ง ์ฃผ๊ธฐ - ์—…๋ฐ์ดํŠธ ๋‹จ๊ณ„ (Updating)

static getDerivedStateFromProps() props๋กœ๋ถ€ํ„ฐ ์ƒํƒœ๋ฅผ ๋™๊ธฐํ™” ํ•˜๊ณ ์ž ํ•  ๋•Œ ํ˜ธ์ถœํ•˜๋Š” ๋ฉ”์„œ๋“œ ๋งˆ์šดํŠธ ์ดํ›„์—๋„ props๋กœ๋ถ€ํ„ฐ ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•  ํ•„์š”๊ฐ€ ์žˆ์„ ๋•Œ ํ˜ธ์ถœํ•œ๋‹ค. shouldComponentUpdate() ์ƒ๋ช…์ฃผ๊ธฐ ๋ฉ”์„œ๋“œ ์ค‘ ํ•˜๋‚˜ ์ปดํฌ๋„ŒํŠธ ์—…๋ฐ์ดํŠธ(๋ Œ๋”๋ง) ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค. render() ์ปดํฌ๋„ŒํŠธ UI ๋ Œ๋”๋ง์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. getSnapshotBeforeUpdate() ์ƒ๋ช…์ฃผ๊ธฐ ๋ฉ”์„œ๋“œ ์ค‘ ํ•˜๋‚˜ ์ตœ๊ทผ์— ๋ Œ๋”๋ง ๋œ ๊ฒฐ๊ณผ๊ฐ€ DOM์— ๋ฐ˜์˜๋˜๊ธฐ ์ง์ „์— ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ ์ด๋‹ค. componentDidUpdate() ์ƒ๋ช…์ฃผ๊ธฐ ๋ฉ”์„œ๋“œ ์ค‘ ํ•˜๋‚˜ ์—…๋ฐ์ดํŠธ๊ฐ€ ์™„๋ฃŒ๋œ ์ดํ›„์— ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ ์ด๋‹ค. import React, { Component } from 'React' class MyCom..

Frontend/React 2023.12.01

React | ๋ Œ๋”๋ง ์ฃผ๊ธฐ - ์ƒ์„ฑ ๋‹จ๊ณ„ (Mounting)

counstructor() ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ ์‹œ ๊ฐ€์žฅ ๋จผ์ € ํ˜ธ์ถœ๋˜๋Š” ์ฒซ๋ฒˆ์งธ ๋ฉ”์„œ๋“œ ์ดˆ๊ธฐ ์ƒํƒœ ์„ค์ • ๋ฐ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. state getDerivedStateFromProps() props๋กœ๋ถ€ํ„ฐ ์ƒํƒœ๋ฅผ ๋™๊ธฐํ™” ํ•˜๊ณ ์ž ํ•  ๋•Œ ํ˜ธ์ถœํ•˜๋Š” ๋ฉ”์„œ๋“œ render() ์ปดํฌ๋„ŒํŠธ UI ๋ Œ๋”๋ง์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. componentDidMount() ์ƒ๋ช…์ฃผ๊ธฐ ๋ฉ”์„œ๋“œ ์ค‘ ํ•˜๋‚˜. ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ Œ๋”๋ง์ด ์™„๋ฃŒ ๋˜๊ณ  DOM์— ๋งˆ์šดํŠธ ๋˜๊ณ ๋‚œ ์ดํ›„์— ์‹คํ–‰๋˜๋Š” ๋ฉ”์„œ๋“œ ์ดˆ๊ธฐ ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ ํ˜น์€ ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ ์š”์ฒญ ๋“ฑ์˜ ๋น„๋™๊ธฐ ์ž‘์—…์„ ์‹คํ–‰ํ•œ๋‹ค. import React, { Component } from 'React' class MyComponent extends Component { constructor(props) { super(props); /..

Frontend/React 2023.11.30

React | ๋ Œ๋”๋ง ์ฃผ๊ธฐ

React์—์„œ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ Œ๋”๋ง ๋˜๋Š” ์ผ€์ด์Šค๋Š” ๋‹ค์–‘ํ•˜๋‹ค. ์ดˆ๊ธฐ ๋ Œ๋”๋ง : ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ดˆ๊ธฐ ์ƒ์„ฑ๋˜๊ณ  DOM์— ๋งˆ์šดํŠธ ๋  ๋•Œ props๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ state๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ Œ๋”๋ง ๋  ๋•Œ ์ปดํฌ๋„ŒํŠธ update ๊ด€๋ จ ์ƒ๋ช…์ฃผ๊ธฐ ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰๋˜์—ˆ์„ ๋•Œ : shouldComponentUpdate, componentDidUpdate ๋“ฑ๋“ฑ.. React ๋ Œ๋”๋ง ์ฃผ๊ธฐ๋Š” ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์–ธ์ œ ๋ Œ๋”๋ง ๋˜๊ณ , ์—…๋ฐ์ดํŠธ ๋˜๋Š”์ง€์— ๋Œ€ํ•ด ์„ค๋ช…ํ•œ๋‹ค. (์ƒ๋ช…์ฃผ๊ธฐ ๋ฉ”์„œ๋“œ๋Š” ์ปดํฌ๋„ŒํŠธ์˜ ์ƒ์„ฑ, ์—…๋ฐ์ดํŠธ, ์†Œ๋ฉธ์— ๊ด€ํ•œ ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•œ ๋‚ด์šฉ์ด๋ฏ€๋กœ ๊ฐœ๋…์ด ๋‹ค๋ฆ„!) 1. ์ƒ์„ฑ ๋‹จ๊ณ„ (Mounting) counstructor() state getDerivedStateFromProps() render() componentDidMount() R..

Frontend/React 2023.11.29

React | ์ƒ๋ช… ์ฃผ๊ธฐ ๋ฉ”์„œ๋“œ(Lifecyle Methods)

์ƒ๋ช… ์ฃผ๊ธฐ ๋ฉ”์„œ๋“œ๋Š” ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํŠน์ • ์ƒํƒœ์— ๋„๋‹ฌํ–ˆ์„ ๋•Œ ์ž๋™์œผ๋กœ ํ˜ธ์ถœ๋œ๋‹ค. ex) ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ, ์—…๋ฐ์ดํŠธ, ์ œ๊ฑฐ ๋“ฑ๋“ฑ... React์˜ ์ฃผ์š” ์ƒ๋ช… ์ฃผ๊ธฐ ๋ฉ”์„œ๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. 1. componentDidMount() ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ Œ๋”๋ฆฐ ๋œ ์งํ›„์— ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ์ด๋‹ค. ์ฃผ๋กœ ์ดˆ๊ธฐ ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ, ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ดˆ๊ธฐํ™” ๋“ฑ์— ์‚ฌ์šฉ๋œ๋‹ค. import React, { Component } from 'react'; class MyComponent extends Component { constructor(props) { super(props); } componentDidMount() { // ์ดˆ๊ธฐ ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ } render() { return (MyComponent); } } export default MyComp..

Frontend/React 2023.11.28

React | ๊ฐ์ฒด ํƒ€์ž… State ์—…๋ฐ์ดํŠธ

์ „๊ฐœ ์—ฐ์‚ฐ์ž(`...`) ์‚ฌ์šฉ ์ด์ „ ๊ฐ์ฒด์˜ ์†์„ฑ์„ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ์˜ค๋ฉด์„œ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๋ฎ์–ด์“ฐ๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ฐ์ฒด๋ฅผ ๋ณต์‚ฌํ•œ๋‹ค. (๋ถˆ๋ณ€์„ฑ ์œ ์ง€) const [myObject, setMyObject] = useState({ name: 'John', age: 25 }); const updateObject = (newData) => { setMyObject((prevObject) => ({ ...prevObject, ...newData, })); }; console.log(updateObject({ age: 26 })); // { name: 'John', age: 26 } Object.assign() Object.assign(target, source1, source2, ...); ์›๋ณธ ๊ฐ์ฒด์—์„œ ์†์„ฑ์„ ๋‹ค๋ฅธ..

Frontend/React 2023.11.27

React | ๋ฐฐ์—ด ํƒ€์ž… State ์—…๋ฐ์ดํŠธ

State์—๋Š” JavaScript์—์„œ ์ง€์›ํ•˜๋Š” ๋ชจ๋“  ํƒ€์ž…์˜ ๊ฐ’์ด ํ• ๋‹น๋  ์ˆ˜ ์žˆ๋‹ค. ex) string, number, boolean, array, object ๋“ฑ๋“ฑ... ๊ทธ ์ค‘ ํ•ต์‹ฌ์€ State ๊ฐ’์ด ๋ถˆ๋ณ€์„ ์œ ์ง€ํ•˜๋ฉด์„œ ์—…๋ฐ์ดํŠธ ๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ์ ์ด๋‹ค. ๋ฐฐ์—ด ํƒ€์ž… State ์—…๋ฐ์ดํŠธ ๋ฐฉ๋ฒ•์€ ๋งŽ์ง€๋งŒ ์ดํ•˜ ์„ธ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด๋ ค๊ณ  ํ•œ๋‹ค. concat() ์‚ฌ์šฉ ๋ฐฐ์—ด์— ์ƒˆ๋กœ์šด ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋งŒ๋“œ๋Š” JavaScript ๋ฐฐ์—ด ๋ฉ”์„œ๋“œ ์ค‘ ํ•˜๋‚˜์ด๋‹ค. ๊ธฐ์กด ๋ฐฐ์—ด์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. (๋ถˆ๋ณ€์„ฑ ์œ ์ง€) const [myArray, setMyArray] = useState([1, 2, 3]); const addElementConcat = (newElement) => { setMyArra..

Frontend/React 2023.11.24
๋ฐ˜์‘ํ˜•