#8. ํ”„๋ก ํŠธ์—”๋“œ ํ™”๋ฉด๊ฐœ๋ฐœ (component ์ œ์ž‘)

 

#8. ํ”„๋ก ํŠธ์—”๋“œ ํ™”๋ฉด๊ฐœ๋ฐœ (component ์ œ์ž‘)

#7. ํ”„๋ก ํŠธ์—”๋“œ ํ™”๋ฉด ๊ฐœ๋ฐœ #7. ํ”„๋ก ํŠธ์—”๋“œ ํ™”๋ฉด ๊ฐœ๋ฐœ 1. React๋กœ ํ™”๋ฉด ๊ฐœ๋ฐœ ์ž, ์ด์ œ๋ถ€ํ„ฐ REACT๋กœ ํ™”๋ฉด์„ ๊ฐœ๋ฐœ ํ•ด๋ณด์ž. ์•ž์—์„œ ์‚ฌ์ „ ์ค€๋น„์‹œ ํ”„๋กœ์ ํŠธ ํด๋”์ธ linkservice์•„๋ž˜์— npx create-react-app ์œผ๋กœ ์ด๋ฏธ c

firstvalue.tistory.com

 

๋ฐ์ดํ„ฐ๊นŒ์ง€ ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ์œผ๋‹ˆ, ์ด์   ๋””์ž์ธ์„ ํ•ด๋ณด์ž.

 

โŒ˜ links.css ( ์œ„์น˜: linkservice/client/src/css/links.css)

โŒ˜ links.jsx ( ์œ„์น˜: linkservice/client/src/component/links.jsx)

---------------------------------------------------------------------------------------------------------

CSS์„ ์œ„ํ•œ ํด๋”๋ฅผ ๋งŒ๋“ค๊ณ  links.cssํŒŒ์ผ์„ ์ƒ์„ฑํ•œ๋‹ค.

๋ชจ๋“  CSS๋Š” links.css์— ๋„ฃ์–ด๋‘์—ˆ๋‹ค.

 

link.css์— ์šฐ์„  link-container์™€ link-wrapper์˜์—ญ์„ ๋งŒ๋“ค์–ด์ฃผ๊ณ ,

.link-container {
    margin-bottom: 6px;
    cursor: move;
}
.link-wrapper {
    padding: 12px;
box-shadow: 0em 0em 0.1em #000000;
    border-radius: 10px;
}

link-show ์˜์—ญ์—๋Š” link image์™€ link name์ด ๋ณด์—ฌ์ฃผ๋„๋ก ํ•œ๋‹ค.

.link-show {
    display: flex;
    align-items: center;
}
.link-img {
    width: 40px;
    height: 40px;
    border-radius: 50%;
    object-fit: cover;
}
.link-title {
    flex-direction: column;
    margin-left: 10px;
min-width: 200px;
    width: 70%;
    font-weight: 600;
}

 

โŒ˜ links.jsx์—์„œ CSS์„ importํ•˜๊ณ  CSS๋“ค์„ ์ ์šฉํ•ด๋ณธ๋‹ค.

links.jsx์— links.css importํ•œ๋‹ค.
div className์„ ์ ์šฉํ•œ๋‹ค.

โŽฎ๊ฒฐ๊ณผํ™”๋ฉด

 

๋งํฌ์ •๋ณด๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ๋“ฑ๋กํ•ด์„œ ํ™•์ธํ•ด ๋ณธ๋‹ค.

JSON ๋ฐ์ดํ„ฐ ์ค‘ ํ™œ์šฉํ•˜์ง€ ์•Š๋Š” ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€์ ์œผ๋กœ ํ™”๋ฉด์— ์ ์šฉํ•ด๋ณด์ž.

 

โŽฎ๋งํฌ์ •๋ณด ๊ฑธ๊ธฐ

 

link-show ๋ถ€๋ถ„์— onClick์ด๋ฒคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

์ด์   ํด๋ฆญํ•˜๋ฉด linkurlํ•ญ๋ชฉ์˜ ์ •๋ณด์— ๋”ฐ๋ผ ํŽ˜์ด์ง€ ์ด๋™์ด ๋œ๋‹ค.

 

 

โŽฎํƒœ๊ทธ์ •๋ณด ํ‘œ์‹œ

 

link-wrapper ๋ถ€๋ถ„์— tag ํ‘œ์‹œ๋ฅผ ํ•ด๋ณด์ž.

ํƒœ๊ทธ๋Š” ์—ฌ๋Ÿฌ ๊ฐœ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋‚˜, ์—ฌ๊ธฐ์„œ๋Š” ์ตœ๋Œ€ 3๊ฐœ๊นŒ์ง€๋งŒ ์ž…๋ ฅ์ด ๊ฐ€๋Šฅ(ํ™”๋ฉด ์ œ์•ฝ์‚ฌํ•ญ) ํ•˜๊ณ ,

ํƒœ๊ทธ์˜ ๊ตฌ๋ถ„์ž๋Š” / ๋กœ ํ•ด์„œ ๊ตฌ๋ถ„ํ•œ๋‹ค. (์˜ˆ,  ํƒœ๊ทธ1/ํƒœ๊ทธ2/ํƒœ๊ทธ3 )

 

ํƒœ๊ทธ์˜ ๋‚ด์šฉ์„ ํ‘œ์‹œํ•ด์ค€๋‹ค.

ํƒœ๊ทธ ํ‘œ์‹œ๋ฅผ ์œ„ํ•œ html ์ถ”๊ฐ€

ํƒœ๊ทธ ๊ด€๋ จ css์„ ์ถ”๊ฐ€ํ•œ๋‹ค

.tag-container {
    display: flex;
    flex-wrap: nowrap;
}
.tag-row {
    flex-basis: 90px;
}
.tag-button {   
    flex-basis: 21%;
    height: 20px;
    border-radius: 6px;
    margin-right: 15px;
    text-align: center;
    font-size: 4px;
    color: rgb(218, 213, 213);
}
.tag-blue {
    background-color: rgb(82, 65, 234); 
}

ํƒœ๊ทธ ํ‘œ์‹œ

๋งˆ์ง€๋ง‰ ํƒœ๊ทธ๋Š” ์ œ์ฃผ๋„/๊ทค/ํ• ์ธ ์—ฌ๋Ÿฌ ๊ฐœ๋กœ ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ถ„ํ• ์„ ํ•ด์•ผ ํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์—ฌ๋Ÿฌ ๊ฐœ ํƒœ๊ทธ๋„ ๊ฐ๊ฐ ์ƒ‰์ƒ์„ ๋‹ค๋ฅด๊ฒŒ ๋ฒ„ํŠผ์„ ๋งŒ๋“ค์–ด ๋ณด์ž.

 

tag button ์ƒ‰์ƒ์„ ๋‹ค๋ฅด๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ classList์— ๋‹ค๋ฅธ ์ƒ‰์ƒ์„ ๋‹ด์•„ ์ ์šฉํ•ด๋ณด์ž.

 

์ฐธ๊ณ ๋กœ, ์กฐ๊ธˆ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœchild component์ธ TagList(Props)์„ ๋งŒ๋“ค์–ด ๋ Œ๋”๋ง์„ ํ•˜๋Š” ๋ฐฉ์‹๋„ ์žˆ๋‹ค.

child component ์ธ TagList(Props)

์œ„ ์†Œ์Šค์—์„œ ๋ˆ„๋ฝ๋œ ๊ฒŒ ํ•˜๋‚˜ ์žˆ๋‹ค.

๋ฐ”๋กœ tag ๊ฐ’์ด ์—†์„ ๊ฒฝ์šฐ๋„ ๋นˆ ํ•ญ๋ชฉ์— tag-orange css๊ฐ€ ์ ์šฉ๋˜์–ด ๋ฒ„๋ฆฐ๋‹ค.

ํƒœ๊ทธ๊ฐ€ ์—†์„๊ฒฝ์šฐ ๋นˆ์นธ์œผ๋กœ ํ‘œ์‹œ๋œ๋‹ค.

 

๊ทธ๋ž˜์„œ tag๊ฐ’์ด ์žˆ์„ ๊ฒฝ์šฐ๋งŒ ๋ Œ๋”๋ง ๋˜๋„๋ก ์กฐ๊ฑด์„ ํ•˜๋‚˜ ๋” ์ค˜์„œ ํ•ด๊ฒฐํ•œ๋‹ค.

!tag ์„ or ์กฐ๊ฑด์œผ๋กœ ์ถ”๊ฐ€ํ•œ๋‹ค.

!tag || tag.split('/').map( (tag, index)=>

๋ฌผ๋ก  child function์ธ TagList(Props)์„ ์•ˆํ•˜๊ณ ,

LinkMain()์—์„œ ๋ฐ”๋กœ ๋ Œ๋”๋ง์„ ํ•ด๋„ ๋ฌด๋ฐฉํ•œ๋‹ค. ์•„๋ž˜ ๊ฐ™์€ ์‹์œผ๋กœ ํ•ด๋„ ๊ฒฐ๊ณผ๋Š” ๊ฐ™์œผ๋‹ˆ ์†Œ์Šค ์ฐธ๊ณ ๋งŒ ํ•˜๊ธธ ๋ฐ”๋ž€๋‹ค.

 

๊ฐœ๋ฐœ ์†Œ์Šค ๋ฐฉ์‹์€ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ์‹์ด๋‹ค. ๋ญ๊ฐ€ ์˜ณ๋‹ค, ๊ทธ๋ฅด๋‹ค ์„ ํŒ๋‹จํ•˜๋Š” ๊ฒƒ์€ ๋งž์ง€ ์•Š๋‹ค. ๋‹จ, ์ข€๋” ๊ฐ€๋…์„ฑ๊ณผ Performance, ์œ ์ง€๋ณด์ˆ˜ ๋“ฑ์„ ๊ณ ๋ คํ•˜์—ฌ ํšŒ์‚ฌ๊ธฐ์ค€ ํ˜น์€ ๊ฐœ๋ฐœ์ž๋“ค๊ณผ ํ˜‘์—…ํ•ด์„œ ์ฝ”๋”ฉ ๊ธฐ์ค€์— ๋งž์ถฐ์„œ ๊ฐœ๋ฐœํ•˜๋ฉด ๋œ๋‹ค.

 

์ด์  , ์ƒ‰์ƒ๊ด€๋ จ css๋ฅผ ์ถ”๊ฐ€ํ•˜์ž.

.tag-orange {
    background-color: rgb(200, 173, 108);
}
.tag-grin {
    background-color: rgb(18, 161, 139); 
}

 

์‹ค์ œ ๋ณต์žกํ•˜๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ์ง€๋งŒ, ์ „์ฒด์ ์œผ๋กœ ํฌ๋งท๋งŒ ์ดํ•ดํ•œ๋‹ค๋ฉด ๋‹ค๋ฅธ ์‚ฌ์ดํŠธ๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š”๋ฐ ๋งŽ์€ ๋„์›€์ด ๋  ๊ฒƒ์œผ๋กœ ์ƒ๊ฐ๋œ๋‹ค.

 

ํ•˜์ง€๋งŒ, ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋ฉด์„œ ์–ด๋ ค์› ๋˜ ๊ธฐ์–ต์ด ์žˆ์–ด์„œ ์ด์ œ๋ถ€ํ„ฐ

TO-DO ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค์–ด ํ•˜๋‚˜์”ฉ ์™„์„ฑํ•ด๋ณด์ž.

( ํ™”๋ฉด์„ค๊ณ„๋ฅผ ๋‹ค์‹œ ํ•œ๋ฒˆ ์ฐธ๊ณ ํ•˜๊ธธ ๋ฐ”๋ž€๋‹ค.)

 


๋‹ค์ŒํŽธ์—๋Š” ๋งํฌ์„œ๋น„์Šค์˜ ๋“ฑ๋กํ™”๋ฉด์„ ์ œ์ž‘ํ•ด๋ณด์ž.

+ Recent posts