๊ด€๋ฆฌ ๋ฉ”๋‰ด

๋ชฉ๋ก๐Ÿ’ป๊ฐœ๋ฐœ ๋…ธํŠธ (21)

C-log

[FE][!ERRO]Too many re-renders. React limits the number of renders to prevent an infinite loop.

json-server api๋ฅผ ๋‹ด๋‹นํ•˜๊ณ  ์žˆ๋˜ useEffect๋ฅผ ์ปค์Šคํ…€ ํ›…์œผ๋กœ ๋งŒ๋“ค์–ด ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ถ„๋ฆฌํ•˜๋˜ ๋„์ค‘์— ๋ฐœ์ƒํ•œ ์—๋Ÿฌ์ด๋‹ค. Too many re-render ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ด์œ ๋Š” ๋Œ€ํ‘œ์ ์œผ๋ก  uesEffect์— ์˜์กด์„ฑ ๋ฐฐ์—ด์„ ์‚ฝ์ž…ํ•˜์ง€ ์•Š์•˜์„ ๊ฒฝ์šฐ์— ๋ฐœ์ƒํ•œ๋‹ค. ํ•˜์ง€๋งŒ ๋‚˜์˜ ๊ฒฝ์šฐ ์ปค์Šคํ…€ ํ›…์—๋Š” useEffect์˜ ์˜์กด์„ฑ ๋ฐฐ์—ด์ด ๋ฌธ์ œ ์—†์ด ์ž˜ ์‚ฝ์ž… ๋˜์–ด ์žˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ํ˜„์žฌ ์ปค์Šคํ…€ ํ›…์˜ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ผ ์ปค์Šคํ…€ ํ›…์„ ๋ถˆ๋Ÿฌ์˜ค๋Š” ์ปดํฌ๋„ŒํŠธ(LabExam)์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๊ณ  ํŒ๋‹จํ–ˆ๋‹ค. ์•„๋ž˜ ์ฝ”๋“œ๋Š” ๋‚˜์˜ ์ปค์Šคํ…€ ํ›…์ด๋‹ค. * useLabExamAxios.js import { useState, useEffect } from "react"; import axios from 'axios'; export default ..

์ˆ˜์ •๋œ API๋กœ ๊ธฐ์กด ํ•จ์ˆ˜ ์ˆ˜์ •

์ตœ๊ทผ ์žฆ์€ ํšŒ์˜์™€ ๋ณ€๋™๋˜๋Š” api์˜ ์ฝ”๋“œ๋“ค์ด ๋งŽ์•„ ์ž์ฃผ push ํ•˜์ง€ ๋ชปํ–ˆ๋‹ค. commit๋งŒ ๋“ค์–ด ๋‚ฌ๊ณ  ๊นƒํ—ˆ๋ธŒ ์ž”๋””๋Š” ํ……ํ……๋น„์–ด ์žˆ์–ด์„œ ์•„์‰ฌ์›€์ด ์กฐ๊ธˆ์€ ๋งŽ์ด ๋‚จ๋Š”๋‹ค. api์˜ ํ˜•ํƒœ๊ฐ€ ๋ฐ”๋€Œ์—ˆ๋‹ค. ๊ธฐ์กด์˜ ํ•จ์ˆ˜์—์„œ ์ด๋ฏธ์ง€๋ฅผ ํŒŒ์‹ฑํ•˜์ง€ ๋ชปํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€๋‹ค. ๊ทธ ์ด์œ ๋Š” api์˜ ๊ตฌ์กฐ๊ฐ€ ๋ฐ”๋€Œ์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์šฐ์„  ๊ธฐ์กด ํ•จ์ˆ˜์™€ ๋ณ€๊ฒฝ๋œ ํ•จ์ˆ˜์˜ ์ฐจ์ด๋ฅผ ์‚ดํŽด๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค. ๊ธฐ์กด outside image๋ฅผ ๋ Œ๋”๋งํ•˜๋Š” ํ•จ์ˆ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ๋‹จ์ˆœํžˆ ์ด๋ฏธ์ง€์˜ image๊ฐ€ ๋ฐฐ์—ด์ผ ๋•Œ ํ•ด๋‹น api๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๋ฐฉ์‹์ด๋‹ค. (์•„๋ž˜ ๋”๋ณด๊ธฐ๋กœ ์ด์ „ api์˜ ํ˜•ํƒœ๋ฅผ ํ™•์ธํ•ด ๋ณด๋ฉด์„œ ๋น„๊ตํ•˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.) ๋”๋ณด๊ธฐ "images": [ "https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistoryFblo..

์ˆ˜์ •๋œ API์™€ ์•ž์œผ๋กœ FE์˜ ๊ฐœ๋ฐœ ๋ฐฉํ–ฅ์„ฑ

*์ด ๊ธ€์€ ํšŒ์˜๋ฅผ ํ† ๋Œ€๋กœ ์ž‘์„ฑ๋œ ๊ธ€์ด๋‹ค. ์ฐธ๊ณ ๋กœ ์—ฌ๊ธฐ์— ์ž‘์„ฑ๋œ url๋“ค์€ ๋ชจ๋‘ ์กด์žฌํ•˜์ง€ ์•Š๋Š” url์ž„์„ ๋ฏธ๋ฆฌ ์•Œ๋ฆฐ๋‹ค. API์— ๋“ค์–ด๊ฐ€์•ผํ•  ์ •๋ณด๋“ค์„ FE์—์„œ ์ˆ˜์ •ํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. API๊ฐ€ ๋ณ€๊ฒฝ ๋ ๋•Œ ๋งˆ๋‹ค ํฌ์ŠคํŒ…์„ ๋”ฐ๋กœ ํ•˜์ง„ ์•Š์•˜์ง€๋งŒ ์žฆ์€ API๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ๋‹ค๋Š” ์ ์„ ๊ณ ๋ คํ•ด์„œ ์•ž์œผ๋กœ FE๊ฐ€ ์–ด๋–ป๊ฒŒ ๊ฐœ๋ฐœ์„ ํ•ด์•ผํ•˜๋Š”์ง€ ๋ฐฉํ–์„ฑ์„ ๋˜์งš์–ด ๋ณด๋ ค๊ณ  ํ•œ๋‹ค. ๊ธฐ์กด์— ์žˆ๋Š” API์—๋Š” ์ผ๋ฐ˜ images๊ฐ€ urls์ •๋ณด๋ฅผ ์ œ๊ณตํ•  ๋•Œ ์ผ๋ฐ˜ ๋ฌธ์ž์—ด๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ์—ฌ๋Ÿฌ ์ด๋ฏธ์ง€๊ฐ€ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์„ ๊ณ ๋ คํ•ด์„œ ๋ฐฐ์—ด๋กœ ์ด๋ฃจ์–ด์ง€๋กœ ํ–ˆ๋‹ค. "images": [ "https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Fblog..png", "https:/..

[FE]jsonํŒŒ์ผ๋กœ๋ถ€ํ„ฐ ๊ฐ ๋ฌธ์ œ ์ด๋ฏธ์ง€ ๋„์šฐ๊ธฐ(4)/html-react-parser

์•ž์„œ ํฌ์ŠคํŒ…์—์„œ dangerouslySetInnerHTML์„ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ ๋“ค์„ ํฌ์ŠคํŒ… ํ–ˆ์—ˆ๋‹ค. ๋‹ค์‹œ ์ƒ๊ธฐ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด ์•„๋ž˜ ๋งํฌ๋ฅผ ํ†ตํ•ด์„œ ๋งˆ์ง€๋ง‰ ํ•˜๋‹จ ๋ถ€๋ถ„์„ ์ฝ์–ด ๋ณด๊ธธ ๋ฐ”๋ž€๋‹ค. [FE]jsonํŒŒ์ผ๋กœ๋ถ€ํ„ฐ ๊ฐ ๋ฌธ์ œ ์ด๋ฏธ์ง€ ๋„์šฐ๊ธฐ(1) ํ˜„์žฌ ๋ฐฑ์—”๋“œ๋กœ ๋ถ€ํ„ฐ ์•„์ง ์™„๋ฒฝํ•œ api๋ฅผ ์ „๋‹ฌ ๋ฐ›์ง€ ์•Š์•˜๋‹ค. ๋ฐฑ์—”๋“œ์—์„œ ์•„์ง ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ง€๊ณ  ์˜ค๋Š” ๊ฒƒ์ด ์™„๋ฃŒ๋˜์ง€ ์•Š์•˜๋‹ค. ๋ฟ๋งŒ์•„๋‹ˆ๋ผ css๋ฅผ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ๊ฐ ์ด๋ฏธ์ง€๋“ค์˜ className๋„ api๋กœ ์ œ์ž‘ํ•˜ hi-code.tistory.com dangerouslySetInnerHTML์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  html์„ ์–ด๋–ป๊ฒŒ ๋žœ๋”๋ง ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ณ ๋ฏผํ•˜๋‹ค ์ฐพ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ html-react-parser์ด๋‹ค. parseImageTagํ•จ์ˆ˜๋Š” ๋ณ€ํ•จ์ด ์—†๋‹ค. ๋ณ€ํ™”๊ฐ€ ๋˜..

[FE]jsonํŒŒ์ผ๋กœ๋ถ€ํ„ฐ ๊ฐ ๋ฌธ์ œ ์ด๋ฏธ์ง€ ๋„์šฐ๊ธฐ(1)

ํ˜„์žฌ ๋ฐฑ์—”๋“œ๋กœ ๋ถ€ํ„ฐ ์•„์ง ์™„๋ฒฝํ•œ api๋ฅผ ์ „๋‹ฌ ๋ฐ›์ง€ ์•Š์•˜๋‹ค. ๋ฐฑ์—”๋“œ์—์„œ ์•„์ง ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ง€๊ณ  ์˜ค๋Š” ๊ฒƒ์ด ์™„๋ฃŒ๋˜์ง€ ์•Š์•˜๋‹ค. ๋ฟ๋งŒ์•„๋‹ˆ๋ผ css๋ฅผ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ๊ฐ ์ด๋ฏธ์ง€๋“ค์˜ className๋„ api๋กœ ์ œ์ž‘ํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ง์ ‘ ์ƒ˜ํ”Œ๋กœ ์ œ์ž‘๋œ jsonํŒŒ์ผ์„ ์ง์ ‘ ์ˆ˜์ • ํ•ด๋ณด๋ คํ•œ๋‹ค. ๋” ๋‚˜์•„๊ฐ€์„œ ๊ธ€์ž ์‚ฌ์ด์— ์ด๋ฏธ์ง€๊ฐ€ ์‚ฝ์ž…๋˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค. ์ด๋Ÿฐ ๋ถ€๋ถ„๋“ค์„ ์ƒ˜ํ”Œ๋กœ ์ž‘์—…ํ•ด ๋ณด๋ ค๊ณ  ํ•œ๋‹ค. ์šฐ์„  ๋‚ด๊ฐ€ ์ˆ˜์ •ํ•œ jsonํŒŒ์ผ์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค. { "sample": [ { "id": "1", "question": "๋‹ค์Œ ์ค‘ ์ด์ค‘๋Ÿ‰ 1.5ํ†ค ํ”ผ๊ฒฌ์ธ ์Šน์šฉ์ž๋™์ฐจ๋ฅผ 4.5ํ†ค ํ™”๋ฌผ์ž๋™์ฐจ๋กœ ๊ฒฌ์ธํ•˜๋Š” ๊ฒฝ์šฐ ํ•„์š”ํ•œ ์šด์ „๋ฉดํ—ˆ์— ํ•ด๋‹นํ•˜์ง€ ์•Š์€ \n๊ฒƒ์€?", "options": [ "โ‘  ์ œ1์ข… ๋Œ€ํ˜•๋ฉดํ—ˆ ๋ฐ ์†Œํ˜•๊ฒฌ์ธ์ฐจ๋ฉดํ—ˆ", "โ‘ก ์ œ1์ข… ๋ณดํ†ต๋ฉด..