#8. ํ๋ก ํธ์๋ ํ๋ฉด๊ฐ๋ฐ (component ์ ์)
๋ฐ์ดํฐ๊น์ง ์ถ๋ ฅ๋๋ ๊ฒ์ ํ์ธํ์ผ๋, ์ด์ ๋์์ธ์ ํด๋ณด์.
โ 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๋ค์ ์ ์ฉํด๋ณธ๋ค.
โฎ๊ฒฐ๊ณผํ๋ฉด
๋งํฌ์ ๋ณด๋ฅผ ์ฌ๋ฌ ๊ฐ ๋ฑ๋กํด์ ํ์ธํด ๋ณธ๋ค.
JSON ๋ฐ์ดํฐ ์ค ํ์ฉํ์ง ์๋ ํญ๋ชฉ์ ์ถ๊ฐ์ ์ผ๋ก ํ๋ฉด์ ์ ์ฉํด๋ณด์.
โฎ๋งํฌ์ ๋ณด ๊ฑธ๊ธฐ
link-show ๋ถ๋ถ์ onClick์ด๋ฒคํธ๋ฅผ ์ถ๊ฐํ๋ค.
์ด์ ํด๋ฆญํ๋ฉด linkurlํญ๋ชฉ์ ์ ๋ณด์ ๋ฐ๋ผ ํ์ด์ง ์ด๋์ด ๋๋ค.
โฎํ๊ทธ์ ๋ณด ํ์
link-wrapper ๋ถ๋ถ์ tag ํ์๋ฅผ ํด๋ณด์.
ํ๊ทธ๋ ์ฌ๋ฌ ๊ฐ๊ฐ ์์ ์ ์์ผ๋, ์ฌ๊ธฐ์๋ ์ต๋ 3๊ฐ๊น์ง๋ง ์ ๋ ฅ์ด ๊ฐ๋ฅ(ํ๋ฉด ์ ์ฝ์ฌํญ) ํ๊ณ ,
ํ๊ทธ์ ๊ตฌ๋ถ์๋ / ๋ก ํด์ ๊ตฌ๋ถํ๋ค. (์, ํ๊ทธ1/ํ๊ทธ2/ํ๊ทธ3 )
ํ๊ทธ์ ๋ด์ฉ์ ํ์ํด์ค๋ค.
ํ๊ทธ ๊ด๋ จ 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)์ ๋ง๋ค์ด ๋ ๋๋ง์ ํ๋ ๋ฐฉ์๋ ์๋ค.
์ ์์ค์์ ๋๋ฝ๋ ๊ฒ ํ๋ ์๋ค.
๋ฐ๋ก 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 ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค์ด ํ๋์ฉ ์์ฑํด๋ณด์.
( ํ๋ฉด์ค๊ณ๋ฅผ ๋ค์ ํ๋ฒ ์ฐธ๊ณ ํ๊ธธ ๋ฐ๋๋ค.)
๋ค์ํธ์๋ ๋งํฌ์๋น์ค์ ๋ฑ๋กํ๋ฉด์ ์ ์ํด๋ณด์.
'React&Python์ผ๋ก ์น๊ฐ๋ฐ > ๋งํฌ์๋น์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
#11. Reactํ๋ฉด์์ ๊ฐ ํญ๋ชฉ์ Input Value์ ๊ฐ์ ธ์ค๊ธฐ (0) | 2023.04.09 |
---|---|
#10. React ๋งํฌ์๋น์ค ๋ฑ๋ก ๋ฐ ํธ์ง ํ๋ฉด ๊ฐ๋ฐ(๋ฑ๋กํ๋ฉด ๋์์ธ) (0) | 2023.03.25 |
#8. ํ๋ก ํธ์๋ ํ๋ฉด๊ฐ๋ฐ (component ์ ์) (0) | 2023.03.17 |
#7. ํ๋ก ํธ์๋ ํ๋ฉด ๊ฐ๋ฐ (0) | 2023.03.16 |
#6. Python์ผ๋ก API ๊ฐ๋ฐ(API Resource์ ์ธ ๋ฐ ํ ์คํธ) (0) | 2023.03.11 |