[๐Ÿ’ป ์ฝ”๋“œ์Šคํ…Œ์ด์ธ  FE 44๊ธฐ]custom-component ๊ณผ์ œ - 2

JiEunยท2023๋…„ 4์›” 20์ผ
0
post-thumbnail

โœ”๏ธ ์‹œ์ž‘

์–ด์ œ ๊ณผ์ œ๋ฅผ ์ด์–ด์„œ ์ง„ํ–‰ํ–ˆ๋‹ค. ๊ณผ์ œ๋Š” ์ด๋ฏธ ์–ด๋Š ์ •๋„ ๋งˆ๋ฌด๋ฆฌํ•œ ์ƒํƒœ์˜€๊ณ 
์Šคํƒ€์ผ ์ˆ˜์ •ํ•˜๋Š”๋ฐ ์ง‘์ค‘ํ–ˆ๋‹ค.


๐Ÿ“ ์•Œ๊ฒŒ๋œ ์ 

โœ”๏ธevent.stopPropagation() : ์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง ๋ง‰๊ธฐ

  • ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์— ์ด๋ฒคํŠธ ํ•ธ๋“œ๋Ÿฌ๊ฐ€ ์žˆ์„ ๋•Œ ์ž์‹ ์ปดํฌ๋„ŒํŠธ์— ์‹คํ–‰๋˜์ง€ ์•Š๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•
    onClick={(event) => event.stopPropagation()}๋ฅผ ์ถ”๊ฐ€ํ•ด ์ค€๋‹ค.
return(
 {!isOpen
	? null
	: <ModalBackdrop onClick={openModalHandler}>
	<ModalView onClick={(event) => event.stopPropagation()}>
		<CloseBtn onClick={openModalHandler}>
			x
        </CloseBtn>
        "๋ชจ๋‹ฌ ์ฐฝ"
        </ModalView>
    </ModalBackdrop>
 }
)


ModalBackdrop, CloseBtn์— ๋‹ซ์„ ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๋Š”๋ฐ
ModalView ์ปดํฌ๋„ŒํŠธ(ํฐ์ƒ‰ ์ฐฝ) ํด๋ฆญ ํ•  ๊ฒฝ์šฐ์—๋„ ๋‹ซํžˆ๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค.
์ด ๋ถ€๋ถ„์„ ModalView ์ปดํฌ๋„ŒํŠธ์— event.stopPropagation()์ถ”๊ฐ€ํ•ด ํ•ด๊ฒฐํ•ด ์ฃผ์—ˆ๋‹ค.

์ƒํƒœ๋ฅผ ์‰ฝ๊ฒŒ ๋ณ€๊ฒฝํ•ด ์ค„๋ ค๋ฉด

  • ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด if๋ฌธ ๋“ฑ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์ง€๋งŒ !(๋…ผ๋ฆฌ ๋ถ€์ • ์—ฐ์‚ฐ์ž)๋ฅผ ์‚ฌ์šฉํ•ด ์ฝ”๋“œ๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
const [isOpen, setIsOpen] = useState(false);

const openModalHandler = () => {
//isOpen์˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝ
	setIsOpen(!isOpen)
};

Styled Conponent ์†์„ฑ ์ถ”๊ฐ€ํ•˜๊ธฐ

attrs()์„ ์ž‘์„ฑํ•ด ์ปดํฌ๋„ŒํŠธ์— ์†์„ฑ์„ ์ถ”๊ฐ€ํ•ด ์ค„ ์ˆ˜ ์žˆ๋‹ค.

  • ๊ฐ์ฒดํ˜•์‹์œผ๋กœ ์ž‘์„ฑ๋˜๋Š” ๊ฑฐ ๊ฐ™๋‹ค.
const Inputst = styled.input.attrs({
	placeholder: "Hi!",
	value: "2"
})`

`;


โœ๏ธ ๋งˆ์น˜๋ฉฐ

Styled Conponent ๋ฌธ๋ฒ• ๋ช‡ ๊ฐœ๋Š” ์ด์ „ CSS, SCSS ๋“ฑ๊ณผ ๋น„์Šท ๋ถ€๋ถ„์ด ์žˆ์–ด ๋งŽ์ด ์–ด๋ ต์ง€ ์•Š์•˜๋‹ค.

props๋ฅผ ์‚ฌ์šฉํ•ด ์Šคํƒ€์ผ์„ ์ƒ์† ๋ฐ›๋Š” ๊ฒฝ์šฐ๊ณผ
์กฐ๊ฑด๋ฌธ์„ ์ด์šฉํ•ด ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ์ ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ค‘์š”ํ•œ ๊ฑฐ ๊ฐ™๋‹ค.

์ด๋ถ€๋ถ„์— ๋Œ€ํ•ด ์ข€ ๋” ๊ณต๋ถ€ํ•ด์•ผ๊ฒ ๋‹ค.

์š”์ฆ˜ ์ด๋ก ์œผ๋กœ๋งŒ ๊ณต๋ถ€ํ•˜๋‹ค React๋กœ ๊ณผ์ œ๋ฅผ ์ง„ํ–‰ํ•˜๋‹ˆ ์ด๊ฒŒ ๋ญ์˜€์ง€?
๋ผ๋Š” ์ƒ๊ฐ์„ ์ž์ฃผ ๋“ค์—ˆ๋‹ค.

๋ฌด์—‡์ด๋“  ์ž์ฃผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ฒŒ ๋˜๋ฉด ๊ธˆ๋ฐฉ ์žŠ์–ด๋ฒ„๋ฆฌ๊ฒŒ ๋˜๋Š” ๊ฑฐ ๊ฐ™๋‹ค.
JavaScriptk, React ๋“ฑ์˜ ๋ฌธ๋ฒ•์„ ์žŠ์ง€ ์•Š๊ฒŒ ํ‹ˆํ‹ˆ์ด ๋ณต์Šตํ•˜๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์ ธ์•ผ ๊ฒ ๋‹ค.

profile
๐Ÿ’ป ํ”„๋ก ํŠธ์—”๋“œ๋ฅผ ๋ชฉํ‘œ๋กœ ์„ฑ์žฅ ์ค‘! (์•Œ์•„๋ดค๋˜ ๋‚ด์šฉ ๋“ฑ์„ ์ •๋ฆฌํ•˜๊ธฐ)

0๊ฐœ์˜ ๋Œ“๊ธ€