
์ด์ ์ง์ง ๋์ ํฅํด ๋ฌ๋ ค๊ฐ๊ณ ์๋ค!
์ ์ถ์ ๋๋ด๊ณ ํํ์ด์ง์ ๋ช๋ช ๋จ์์๋ ์ค๋ฅ๋ค์ ์กฐ์๋ค๊ณผ ํจ๊ป ๋ง๋ฌด๋ฆฌํ๋ฉด์
๋์ ๋ง์ดํ๊ณ ์๋ค!

๋ชฉํ ์ง์ฒ๋ chart
๋๋ ๋ชจ์์ ์ฐจํธ๋ก ๊ตฌํํ ๋ชฉํ ์ง์ฒ๋.
https://www.npmjs.com/package/react-minimal-pie-chart
์ด๋ ๊ฒ ์๊ธด ๋๋๋ชจ์์ ์ง์ฒ๋!
๊ทธ๋์ ๋ด๊ฐ ๊ตฌํํ ์ฝ๋๋
import { PieChart } from 'react-minimal-pie-chart';
<PieChart
data={[
{
value: item.progress, // ๊ฐ
color: '#aac4ff', // ์ฑ์์ง๋ ์
name: 'progress',
},
]}
style={{ margin: '20px 10px 0 0' }}
reveal={item.progress} // ์์ ๋ค์ด๊ฐ๋ ๊ฐ
lineWidth={18} // ๋๋ ๋๊ป
background="#f3f3f3" // ์ ์ฑ์์ง์ง ์์ ๋ถ๋ถ
lengthAngle={360} // ์ ๋ชจ์
rounded // ๋๊ธ
animate // ์ง์
์ ์ฑ์์ง๋ ์์ง์
// ๊ฐ์ด๋ฐ์ ์ ํ๋ ๊ธ์จ , ๊ธ์จ ์คํ์ผ
label={({ dataEntry }) => dataEntry.value + '%'}
labelStyle={{
fontSize: '20px',
fill: '#aac4ff',
}}
labelPosition={0}
/>
item.progress๋ ๋ฐฑ์๋์์ ๋์ด์จ ํผ์ผํธ ์์น์ด๋ฉฐ,
๋ฐฑ์๋ ๋ถ์ด ๋ชฉํ๊ธ์ก์์ ์ ์
๊ธ์ก์ ๋๋์ด์ ๋ณด๋ด์ฃผ์
จ๋ ๋ฐ์ดํฐ์ด๋ค.
data={[
{
value: item.progress,
color: '#aac4ff',
name: 'progress',
},
]}
์ฌ๊ธฐ์ value ๊ฐ์, ๋ณ์๋๊น ๋น์ฐํ {} ๋ฅผ ๋ฃ์ด์ค์ผ ํ๋ค๊ณ ์๊ฐํด์
{item.progress}๋ผ๊ณ ์ ์ด์ ์๋๊ธธ๋ 'item.progress'๋ผ๊ณ ์ ์๋๋ฐ,
๊ฒฐ๊ตญ์ {} ์์ ์์ผ๋ฏ๋ก ์ค๊ดํธ๊ฐ ๋ ๋ฒ ์ฐ์ฌ์ ์๋์๋ ๊ฑธ๋ก..
๊ทธ๋์ ์๋ฌด๊ฒ๋ ์ ์ด ๊ฒฐ๊ณผ๊ฐ ์ถ๋ ฅ์ ์ฑ๊ณตํ๋ค
div flex ์กฐ์

์ด ์นด๋์ div๋ <ํ์ดํ+input> / <์ฐจํธ> ์ด๋ ๊ฒ ๋๋๋ค.
์๋ค๋ค์ div์์ ๊ฐ๊ฐ ๋๋ ์ฃผ๋ ๋ฑ ๋ฐ๋ฐ์ฉ ์ฐจ์งํ๊ณ ์๋ ๋ชจ์ต.
๊ธฐ์ด css์ด์ง๋ง ๋๋ฌด ์ค๋์ ์ ๋ฐฐ์์ ๋ค์ ์ ์ด๋ณธ๋ค.
<div style={{ display: 'flex' }}>
<div style={{ flex: '4' }}>
<div style={{ display: 'flex' }}>
<Header>๋์ ๋ชฉํ </Header>{' '}
<input
className="SettingInput"
defaultValue={item.goalName}
/>
</div>
...
</div>
<div style={{ flex: '1' }}>
<PieChart ... />
</div>
์ฒ์์๋ ์ฒซ ์ค์,
<div style={{ display: 'flex', flex: "4 1" }}>
์ด๋ ๊ฒ ์ฃผ์์๊ณ ์ด๊ฑด ์๋์๋ค.
๋ฐ๋ก๋ฐ๋ก 4, 1 ์ด๋ ๊ฒ ์ฃผ๋๊น ์ ํํ 4:1 ์นธ์ ์ฐจ์งํ๊ฒ ๋์๋ค!
์ฐธ๊ณ : https://heinafantasy.com/89
๋งํ์ ๋ชจ์ ๋ฒํผ

.LinkButton {
width: 25%;
height: 40px;
background: #aac4ff;
border-radius: 10px;
}
.LinkButton::before {
border-top: 5px solid transparent;
border-right: 20px solid #aac4ff;
border-bottom: 5px solid transparent;
content: '';
position: relative;
top: -15px;
left: -45px;
}
๊ทผ๋ฐ ์ด๊ฒ ์ฌ์ด์ฆ๊ฐ ์ค์ด๋ค๋ฉด, relative ์๋ ์์น๊ฐ ๋ณ๊ฒฝ๋จ

์ด๋ ๊ฒ ๋์ด๋ฒ๋ฆฐ๋ค.
๊ทธ๋์ ๊ฒฐ๊ตญ์ ๋นผ๊ธฐ๋ก...
๋ฏธ๋์ด์ฟผ๋ฆฌ๋ก ํ๋ฉด width๊ฐ ์ค์ด ๋ค๋ฉด ์ด ๋ถ๋ถ์ ๋นผ๋ ์์ผ๋ก ํ๋ค.
react ์กฐ๊ฑด๋ฌธ ์ด์ฉํ๊ธฐ
โ๏ธโ๏ธ ์ผํญ์ฐ์ฐ์ ์ฌ์ฉ โ๏ธโ๏ธ
์ฒ์์ ๋ฐ๋ณด๊ฐ์ด ๋น์ฐํ๊ฒ if๋ถํฐ ๊บผ๋ด์ ์จ๋ฒ๋ ธ๋ค.. ใ
_ใ
์ฝ์ค์์ ์ด๋ถ๋ถ์ ๋ถ๋ช
ํ ๋ฐฐ์ ๋ ๋ด์ฉ์ธ๋ฐ ,
๊ณต๋ถ๋ฅผ ํ ๊ฒ๊ณผ ์ด๋ ๊ฒ ์ง์ ์จ๋ณด๋ ๊ฒ์ ํ์คํ ์ฒ์ง์ฐจ์ด์ธ๋ฏ.
์๋ฐ์คํฌ๋ฆฝํธ์์ ์ฐ๋ if๋ฌธ์ ์ปดํฌ๋ํธ์ return () ์, ์ฆ JSX ๋ด์์๋ ์ฌ์ฉํ ์ ์๋ค!! ๊ผญ ๊ผญ ๊ธฐ์ตํ ๊ฒ ใ ใ
โ <div> if (์กฐ๊ฑด) {statement} </div> โ
โญ๏ธ ์กฐ๊ฑด ? ์กฐ๊ฑด์ด ์ฐธ์ผ๋ ์คํํ ์ฝ๋ : ๊ฑฐ์ง์ผ ๋ ์คํํ ์ฝ๋ โญ๏ธ
โ ํ๋ฆฐ ์ฝ๋
if({item.status} === PROGRESS) {
<h2 className="Font">
๋ชฉํ์น์ ๋๋ฌํ๊ธฐ๊น์ง{' '}
<span className="Hilight">
{Math.ceil(item.price / item.monthlyPayment)}๊ฐ์
</span>{' '}
๋จ์์ด์!
</h2>
} else {<h2 className="Font"> ๋ชฉํ์น์ ๋๋ฌํ์์ด์!</h2>}
โญ๏ธ ๊ณ ์น ์ฝ๋
{item.status === 'PROGRESS' ? (
<h2 className="Font">
๋ชฉํ์น์ ๋๋ฌํ๊ธฐ๊น์ง{' '}
<span className="Hilight">
{Math.ceil(item.price / item.monthlyPayment)}๊ฐ์
</span>{' '}
๋จ์์ด์!
</h2>
) : (
<h2 className="Font"> ๋ชฉํ์น์ ๋๋ฌํ์์ด์!</h2>
)
}

๋ฐ์ํ ๊ตฌํ
๋๋ง ๊ณ์ ๋ฐ์ํ์ด ์๋ผ์ ์ ๋จน์๋ค ใ
ใ
๊ธฐ๋ณธ ๋ฐ์ํ์ด ๋ด์ฅ๋์ด์๋ mui๋ก ๋ฆฌ์คํธ๋ฅผ ๋ฝ์ ๊ฑธ ๊ทธ๋ฌ๋..
๋ง์ด ๊ณ ๋ฏผํ์ง๋ง... ๊ฒฐ๊ตญ์๋ ๋ถ๋ชจ์ ๋ถ๋ชจ๋ฅผ ์ฐพ์ width : 100% ๋ฅผ ์ฃผ๊ณ ๋์
๊ณ ์ ๊ฐ์ 600px์ด ์ค์ด๋ค๊ธฐ ์์ ใ
ใ
๋ค์๋ถํฐ๋ ์กฐ์ ์๋๋ค๊ณ ๋ฌด์์ padding, margin ์ฃผ์ง๋ง๊ณ
๊ผญ ์์ธ๋ ์ฐพ๊ณ ๋ ์ ์ฉ์๋๋ css ์ฐพ์ ์ง์๊ฐ๋ฉด์
์ด๋์ ๋ด๋ ค์จ ์คํ์ผ์ธ์ง ๊ผญ ํ์ธํ๋ฉด์ ํด์ผ๊ฒ ๋ค.

์ฌ๊ธฐ์ ์ค์ด๋๋ ๋น์ ๋ฒํผ ์์น๋ฅผ ์ข ์๋๋ก ๋ด๋ฆฌ๊ธฐ ์ํด
๋ฏธ๋์ด ์ฟผ๋ฆฌ ์ฌ์ฉ
.LinkButton {
display: flex;
flex-direction: row;
align-items: flex-end;
justify-content: center;
margin: 54px 0 10px;
width: 25%;
height: 40px;
background: #aac4ff;
border-radius: 10px;
}
@media (max-width: 600px) {
.LinkButton {
margin: 70px 0 10px;
}
}

์กฐ๊ธ ๋ ๊น๋ํด์ก๋ค ใ ใ ...
input number ํ์ ์คํฌ๋กค ๋จ์์กฐ์
<input type="number" step="1000">
์๋ ์คํฌ๋กค ์กฐ์ ํ๋ฉด 1์ฉ ์ฌ๋ผ๊ฐ์๋๋ฐ
์ด์ 1000์ฉ ์ฌ๋ผ๊ฐ๋ค..
๋์ธ๋ฐ 1์ฉ ์ฌ๋ผ๊ฐ๋๊ฑฐ ๋ถํธํ๋๋ฐ ์์ ์๋ฃ!

'Project > Main-project' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SEB 41] Main Project (6) ๋ง๋ฌด๋ฆฌ ํ๊ณ (0) | 2023.05.18 |
---|---|
[SEB 41] Main Project (4) ๋ฐฐํฌ ํ ๋ง๋ฌด๋ฆฌ ๋ฌธ์ ์ +ํด๊ฒฐ (1) | 2023.05.18 |
[SEB 41] Main Project (3) ์ค๋ฅ ๋ฐ ์๊ฒ ๋ ์ ์ ๋ฆฌ (1) | 2023.05.18 |
[SEB 41] Main Project (2) ๋ชฉํ ๊ฒ์๊ธ CRUD ๊ธฐ๋ฅ ๊ตฌํ (0) | 2023.05.18 |
[SEB 41] Main Project (1) ์ด๊ธฐ ํ ๊ท์น, ๊ธฐ๋ณธ ์ ์์ ์์ฑ (0) | 2023.05.18 |