โ์๊ฒ๋ ๊ฒ๊ณผ ๋๋์
- ๋ฐ์ดํฐ ๊ตฌ์กฐ์๋ ์ค๊ณ๊ฐ ํ์ํ๋ค
- CSS์์ ํ ์ ์๋ ๊ฑด CSS์์ (์ผ์ ๊ธ์ ์ ์ด์์ด๋ฉด ์๋ฅด๊ณ ... ๋ถ์ด๊ธฐ = ellipsis)
- ์ปดํฌ๋ํธ ๋ด ๋ณ์ ์์น
- ์กฐ๊ฑด๋ถ ๋ ๋๋ง, ์ผํญ์ฐ์ฐ์ ๊ทธ๋ง ์ฌ๋ํ์
- lodash์ uniqBy
- ๋ฆฌ๋์ค ํดํท
- Redux DevTools
- ์์ง๋ง์ ํ๋ก ํธ์๋ ํด๋ฆฐ์ฝ๋
๐ฅ๊ทธ๋์ ํด๋ณด๋ ์ ๋ฆฌ
1. ๋ฐ์ดํฐ ๊ตฌ์กฐ์๋ ์ค๊ณ๊ฐ ํ์ํ๋ค
์๊ฐํด๋ณด๋ฉด ์๋ฐ๋ก ํ๋ก์ ํธ ํ ๋๋ ์ค๊ณ๊ฐ ๊ฑฐ์ ๊ฐ๋ฐ์ด๋ ๋ง๋จน๊ฒ ๊ฑธ๋ ธ์๋๋ฐ ํฌ๊ฒ ๋ค๋ฅผ๋ฆฌ๊ฐ ์๊ฒ ์ง..!
์๋ฅผ๋ค๋ฉด ์ ๋ฒ ๊ณผ์ ๋ฆฌ๋ทฐ์ธ๋ฐ, ์ฌ์ฉ์ ๋ฑ๊ธ์ด ์์ด์ ๊ฐ ๋ฑ๊ธ๋ณ๋ก ์ ๊ทผํ ์ ์๋ ๊ฒ์ํ์ด ๋ค๋ฅธ ๊ฒฝ์ฐ์
์์ ๊ฐ์ด access(์ ๊ทผํ ์ ์๋ ํ์ด์ง)๋ฅผ ํ๋ํ๋ ์ ์ด์ฃผ์ง ์๊ณ
ํด๋น ์ ์ ์ ๊ถํ level๋ง ์ ๋ฌํ ํ ๊ทธ์ ๋ฐ๋ฅธ ์ ๊ทผ ๊ฐ๋ฅ ๋ฉ๋ด ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ก ๊ด๋ฆฌํด์ผ ํ๋ค!
2. CSS์์ ํ ์ ์๋ ๊ฑด CSS์์
// ๋ด์ฉ ์๋ต
if (summary.length > 200) {
return summary.substring(0, 200) + '...';
// ๋ด์ฉ ์๋ต
๊ณผ๊ฑฐ์ ๋๋ ๊ทธ๋ฌ์ต๋๋ค..๐ (์ฌํ ์๊ฐ์ ๋น๊ฒจ๊ฐ์ง ์์ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ )
// ๋ด์ฉ ์๋ต
summary.length !== 0 ? summary : SUMMARY_NOT_EXIST
ellipsis์ ๊ด๊ณ์์ง๋ง ๊ณ ์น๊ณ ์ถ์ผ๋ ์ผํญ์ฐ์ฐ์๋ก ๋ฐ๊ฟ์ค๋๋ค.
/* css */
.movie__summary {
max-width: 80%;
margin-bottom: 0.7rem;
/* ๊ธ์์ ์ ํ ๊ด๋ จ */
overflow: hidden;
text-overflow: ellipsis; /* ... ์ ํ์ํจ */
display: -webkit-box; /* ์ ์ฐํ ๋์ด ์ฆ๊ฐ๋ฅผ ์ํด ํ๋ ์ค ๋ฐ์ค ํํ๋ก ์ ํ*/
-webkit-box-orient: vertical; /* ํ๋ ์ค ๋ฐ์ค์ ๋ฐฉํฅ ์ค์ */
word-wrap: break-word; /* ์๋ผ๋ฒ๋ฆด ๊ธ์๋ฅผ ๋จ์ด ๋จ์๋ก */
-webkit-line-clamp: 4; /* ๋ณด์ฌ์ค ์ค์ ๊ฐฏ์ */
line-height: 1.7rem; /* ํ ์ค์ ๋์ด */
height: calc(1.7rem * 4); /* ์ด ๋์ด = ์ค์ ๊ฐฏ์ x ์ค ๋์ด */
}
๊ทธ๋ฆฌ๊ณ ์ฌ๋ฌ ์ค ๊ธ์ ์ ํ์ ๊ผญ ํ์ํ๊ฑด width
, height
์ด๋ค!
scss๋ฅผ ์ฌ์ฉํ๋ฉด /* ๊ธ์์ ์ ํ ๊ด๋ จ */ ์ฃผ์ ๋ฐ๋ถ๋ถ์ @mixin์ผ๋ก ๋ฑ๋กํด์ ์ฌ์ฉํด๋ ๋๋ค.
3. ์ปดํฌ๋ํธ ๋ด ๋ณ์ ์์น
์ด๊ฑด ์ฒซ๋ฒ์งธ ๊ณผ์ ํ ๋ ๋๋์ ๊ณผ๋ ์ฐ๊ฒฐ๋๋ ๋ถ๋ถ์ด๋ผ๊ณ ์๊ฐํ๋ค.
์ฝ๋ ๋ง ์ง์ง ๋ง๊ธฐ, ๋ณด๊ธฐ ์ข์ ์ฝ๋ ์ง๊ธฐ, ์ ๊ทธ๋ ๊ฒ ์งฐ๋์ง ๋ฌผ์ด๋ณด๋ฉด ์ด์ ๋ฅผ ๋งํ ์ ์์ ์ ๋๋ก ์๊ฐํ๊ธฐ
์ด๊ฑด ๋ฏธ๋์ ๋๋ฅผ ์ํด์๋ ๋ด ์ฝ๋๋ฅผ ์ฝ์ ๋ค๋ฅธ ์ฌ๋๋ค์ ์ํด์๋ ๊ผญ!
์ปดํฌ๋ํธ ๋ด์์๋ ๊ฐ๋ ์ฑ์ ์ํด์ ์์๋ฅผ ์ง์ผ์ ์ ์ด์ฃผ๋ฉด ์ข๋ค๊ณ ํ๋ค.
1. import ์์๋ ๊ฒฝ๋ก ๋๋ ์ฐ๊ด์ ๋ฐ๋ผ ๋ฌถ์ด์ฃผ๊ธฐ, ํ์ํ ๊ฒฝ์ฐ ์ค๋ฐ๊ฟ ๋ฑ์ผ๋ก ๊ฐ๋ ์ฑ ํ๋ณดํ๊ธฐ
2. propType
3. ์ปดํฌ๋ํธ ์ ์
4. Styled Component
5. ๊ฐ๋จํ ์์ ์ค์
6. ํด๋น ์ปดํฌ๋ํธ์์๋ง ์ฌ์ฉํ ํจ์
1. import๋ '์ด ํ์ผ์์๋ ์ด๋ค ๊ฒ๋ค์ด ํ์ํ๊ตฌ๋' ํ๊ณ ์ ์ ์๋๋ก ์ ์ด์ฃผ์ด์ผ ํ๋ค.
- node modules
- utils
- ๋ฉ๋ฆฌ ์๋ ์ปดํฌ๋ํธ
- ๊ทผ์ฒ์ ์๋ ์ปดํฌ๋ํธ
- style ๊ด๋ จ
2. ts๋ฅผ ์ ์ฐ๋ฉด ์ ์ด์ฃผ๋ฉด ์ข๋ค.
- ํ์ ์ค๋ฅ ๋ฐฉ์ง
- ์ด๋ค ํ์์ ๊ฐ์ ๊ด๋ฆฌํ๋์ง ํ ๋์ ํ์ ๊ฐ๋ฅ (์์ผ๋ฉด ์ฝ๋ ๋ค ์ฝ์ด๋ด์ผ ํจ)
3. ์ปดํฌ๋ํธ๊ฐ ํ ๋์ ๋ค์ด์ค๋๋ก ์์ฑํด์ฃผ๊ธฐ.
4. ์์ ๊ฐ์ ์ด์ ๋ก styled component๋ ์ปดํฌ๋ํธ ๋ค์์ ์ ์ํ๊ธฐ.
5. ๊ฐ๋จํ ์์, ๊ฐ๋จํ data ๋ฑ, ํน์ data๊ฐ ๊ฐ์ฒด์ ๋๋ฌด ๊ธธ๋ฉด ์ธ๋ถ ํ์ผ๋ก ๋ถ๋ฆฌํ๊ธฐ!
6. ๊ณตํต์ผ๋ก ์ฌ์ฉํ๋ utils์ฑ ํจ์๋ ๋ฐ์ผ๋ก ๋นผ์ฃผ๊ธฐ.
4. ์กฐ๊ฑด๋ถ ๋ ๋๋ง, ์ผํญ์ฐ์ฐ์ ๊ทธ๋ง ์ฌ๋ํ์
์์ง๋ if๋ฌธ์ ๋๋ฌด๋๋ฌด ์ข์ํ๋ ๋์ง๋ง(๐ญ) ์ด์ ์ผํญ์ฐ์ฐ์
์ and์ฐ์ฐ์
๋ฅผ ์ฌ๋ํ๋๋ก ๋
ธ๋ ฅํด๋ด์ผ๊ฒ ๋ค.
ํ์ง๋ง! ์ผํญ์ฐ์ฐ์๋ ๋ง๋ฅ์ด ์๋๋ค! ๋๋ฌด ๋ณต์กํด์ง๋ฉด ์์๋ณด๊ธฐ ํ๋ค๊ธฐ ๋๋ฌธ!
false ์ผ ๋ null์ ๋ด๋ณด๋ด๋ฉด &&์กฐ๊ฑด
์ผ๋ก ๋ฐ๊ฟ์ ์๊ฐํด๋ณด๊ธฐ, ํน์ ์กฐ๊ฑด๋ถ ๋ ๋๋ง์ด ์ ๋ง ํ์ํ์ง ๋ค์ ์๊ฐํด๋ณด๊ธฐ.
5. lodash์ uniqBy
๐กLodash๋?
js ์ ํธ๋ฆฌํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ. array, collection, date, number, object ๋ฑ์ด ์์ผ๋ฉฐ, ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ๋ค๋ฃฐ ์ ์๋๋ก ๋์์ค๋ค. ํนํ ๋ฐฐ์ด ์์ ๊ฐ์ฒด๋ค์ ๊ฐ์ ํธ๋ค๋ง ํ ๋ ์ ์ฉํ๋ฐ, ์ค๋ณต์ ๊ฑฐ๋ ํน์ ๊ฐ๋ง ์ถ์ถํ๊ธฐ ๋ฑ์ด ๋ง์ด ์ฐ์ธ๋ค๊ณ ํ๋ค.
๊ทธ ์ค uniqBy
๋ ํน์ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ๊ณ ์ ํ ๊ฐ๋ง ๊ฐ์ ธ์ฌ ๋ ์ฐ์ธ๋ค.
uniqBy(๋ฐ์ดํฐ, ๊ธฐ์ค ๊ฐ)
์ด๋ฒ ๊ณผ์ ์์๋ items๋ฅผ 'id'๊ฐ์ผ๋ก ํ์ธํด์ ์ค๋ณต์ด ์์ผ๋ฉด ์ ์ธํ๊ณ ํ๋ฉด์ ์ถ๋ ฅํด์ฃผ๋ ๋ถ๋ถ์ด ์์๋ค.
6. ๋ฆฌ๋์ค ํดํท
๋ฆฌ๋์ค ํดํท(Redux Toolkit)์ ๋ฆฌ๋์ค์ ๊ณต์ ๊ฐ๋ฐ ๋๊ตฌ์ด๋ค. https://redux-toolkit.js.org/
๋ฆฌ๋์ค๊ฐ ์ข๊ธฐ๋ ํ๋ฐ ์ฝ๋์ ์์ด mobx์ ๋นํด ๋ง๊ณ ๋ณต์กํ ๋จ์ ์ด ์๊ฒจ์ ํดํท์ด ๋์๋ค๊ณ ํ๋ค. (๋ฆฌ๋์ค ์๋ชป์ด๋ผ ์ฌ๊ธฐ์๋ถํฐ ํผ๋์ด ์๊ฒผ๋ค...)
ํดํท์ ์ฅ์
- ํดํท์ ์ฌ์ฉํ๋ฉด action type์ด๋ action creator๋ฅผ ๋ฐ๋ก ์์ฑํ์ง ์์๋ ๋๋ค.
- ๋ฏธ๋ค์จ์ด ์ถ๊ฐ๊ฐ ํธ๋ฆฌํ๋ค.
- immer๊ฐ ๋ด์ฅ๋์ด ์์ด mutable ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํด๋ ๋๋ค.
- redux-thunk๊ฐ ๋ด์ฅ๋์ด ์์ด ๋น๋๊ธฐ๋ฅผ ์ง์ํ๋ค.
- ํ์ ์คํฌ๋ฆฝํธ ์ง์์ด ์ ๋๋ค
์ผ๋ฅธ ๋ฆฌ๋์ค ์ธ๊ฐ ๋ฃ๊ณ ์์ผ๊ฒ ๋ค....๐ญ๐ญ๐ญ
7. Redux DevTools
์ด๋ฒ ๊ณผ์ ๋ฅผ ํ๋ฉด์ ์๊ฒ ๋ ํฌ๋กฌํ์ฅ ํ๋ก๊ทธ๋จ. (๋งํฌ๋ ์ฌ๊ธฐ!)
์ด๋ ๊ฒ ์ด๋ค ๊ฐ๋ค์ด ๋ค์ด์๋์ง ํ๋์ ์ ์ ์๋ค!! console.log๋ก ํ๋ํ๋ ๋ค ์ฐ์ด๋ณด์ง ์์๋.. ๋๋ค..!๐
8. ์์ง๋ง์ ํ๋ก ํธ์๋ ํด๋ฆฐ์ฝ๋
๐โ๏ธ๋ค์ด๊ฐ๊ธฐ ์ ์!
ํด๋ฆฐ์ฝ๋ == ์ํ๋ ๋ก์ง์ ๋น ๋ฅด๊ฒ ์ฐพ์ ์ ์๋ ์ฝ๋
!= ์งง์ ์ฝ๋
ํ ์ค์ ์ง์ ๋ฆผ๋์ ํด๋ฆฐ์ฝ๋ ์์ฑ ๋ฐฉ๋ฒ! ๋ค๋ฅธ ์์๋ ๋ช ๊ฐ ๋ดค์๋๋ฐ ๋ณผ ๋ ๋ง๋ค ๋ง์์ ๋๋ฌด ์ํ์ ์ ๊ฐํํ๊ฒ ๋๋ค.
์๋ฆฌ๋ฉํ ๋๊ป์ ์์ ์๊ฐ์ ๋ง์ํด์ฃผ์ ๋ด์ฉ๊ณผ ํจ๊ป ์ ๋ฆฌํ์๋ฉด....
โพ ๋ณ์
a. ์๋ฏธ์๊ณ ๋ฐ์ํ๊ธฐ ์ฌ์ด ๋ณ์๋ช ์ฌ์ฉํ๊ธฐ
b. ๋์ผํ ์ ํ์ ๋ณ์์ ๋์ผํ ์ดํ๋ฅผ ์ฌ์ฉํ๊ธฐ
โพ ํจ์
a. ํจ์ ์ธ์๋ 2๊ฐ ์ดํ๊ฐ ์ข์
b. es6์ ๋น๊ตฌ์กฐํ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์
- ๊ทธ ํจ์์ ์๊ทธ๋์ณ(์ธ์์ ํ์ , ๋ฐํ๋๋ ๊ฐ์ ํ์ ๋ฑ)๋ฅผ ๋ณผ ๋ ์ด๋ค ์์ฑ์ด ์ฌ์ฉ๋๋์ง ์ฆ์ ์ ์ ์์
- ํจ์์ ์ ๋ฌ๋ ์ธ์ ๊ฐ์ฒด์ ์ง์ ๋ ๊ธฐ๋ณธ ํ์ ๊ฐ์ ๋ณต์ ํ๋ฉฐ, ์ด๋ ์ฌ์ด๋์ดํํธ๋ฅผ ๋ฐฉ์งํจ
- Linter๋ฅผ ์ฌ์ฉํ๋ฉด, ์ฌ์ฉํ์ง ์์ ์ธ์์ ๋ํด ๊ฒฝ๊ณ ํด์ฃผ๊ฑฐ๋ ๋น๊ตฌ์กฐํ ์์ด ์ฝ๋๋ฅผ ์งค ์ ์๊ฒ ํ ์ ์์
// good
function createMenu({ title, body, buttonText, cancellable }) {
// ...
}
createMenu({
title: 'Foo',
body: 'Bar',
buttonText: 'Baz',
cancellable: true
});
// bad
function createMenu(title, body, buttonText, cancellable) {
// ...
}
c. ํจ์๋ ํ๋์ ํ๋๋ง ํด์ผ ํจ (๋งค์ฐ๋งค์ฐ๋งค์ฐ ์ค์)
- ํจ์๊ฐ ํ๋ ์ด์์ ํ๋์ ํ๋ฉด ์์ฑํ๊ธฐ๋, ํ ์คํธํ๊ธฐ๋, ์ดํดํ๊ธฐ๋ ์ด๋ ต๋ค.
//good
function emailClients(clients) { // ์ด๋ฉ์ผ์ ๋ณด๋ด๋ ํจ์
clients
.filter(isClientActive)
.forEach(email);
}
function isClientActive(client) { // ํ์ฑํ ๋ ๊ณ ๊ฐ์ ์ฐพ๋ ํจ์
const clientRecord = database.lookup(client);
return clientRecord.isActive();
}
//bad
function emailClients(clients) { // ํจ์ ์ด๋ฆ์๋ email์ ๋ณด๋ธ๋ค๊ณ ํ๋๋ฐ..?
clients.forEach(client => {
const clientRecord = database.lookup(client);
if (clientRecord.isActive()) { // ๊ณ ๊ฐ์ค์์ ํ์ฑํ ๋ ๊ณ ๊ฐ์ ์ฐพ๋ ๊ธฐ๋ฅ๋ ์๊ณ ?
email(client); // ์ด๋ฉ์ผ ๋ณด๋ด๋ ๊ธฐ๋ฅ๋ ์๋ค?!
}
});
}
d. ํจ์๋ ๋จ์ผ ํ๋์ ์ถ์ํ ํด์ผ ํจ
- ์ถ์ํ : ํต์ฌ๋ง ๋จ๊ธฐ๊ณ ์๋์ ์ผ๋ก ๋ ์ค์ํ ๋ํ ์ผ์ ์จ๊ธฐ๊ธฐ
- ๋จ์ผ ์ฑ
์ ์์น์ ์๊ฑฐํด์ ํจ์๋ ๊ผญ ํ๋์ ์ผ๋ง ํด์ผ ํจ!
- ํจ์ ์ด๋ฆ๋ง ๋ณด๋๋ผ๋ ์ด๋ค ์ผ์ ํ๋์ง ๋ฐ๋ก ์ ์ ์๋๋ก ํด์ผ ํจ
e. ๋งค๊ฐ๋ณ์๋ก ํ๋๊ทธ ์ฌ์ฉํ์ง ๋ง๊ธฐ
//good
function createFile(name) {
fs.create(name);
}
function createTempFile(name) {
createFile(`./temp/${name}`);
}
//bad
function createFile(name, temp) { // temp๋ก ๊ฐ๋ฆฌ๊ฒ ๋๋๋ฐ ์ด๋ฐ ๊ฒฝ์ฐ์๋ ํจ์๋ฅผ ๋ฐ๋ก ์์ฑํ์
if (temp) {
fs.create(`./temp/${name}`);
} else {
fs.create(name);
}
}
f. ์ ์ญํจ์ ์ฌ์ฉํ์ง ๋ง๊ธฐ
- ํ๋ ์ ํํ๋ ์คํ์ผ์ด์ง๋ง, ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ถฉ๋์ด ์ผ์ด๋ ์ ์๊ธฐ ๋๋ฌธ์ ์ํ!
g. ์ฃผ์ ์์ด ์ฝ๋๋ก ๋งํด๋ผ!
- ๋ ํผ์ ๊ณต๋ถํ๊ธฐ์ํด ํ๋ก์ ํธ๋ฅผ ํด๋ก ํ ๋ค ๊น์ ๋๊ณ ํ์คํ์ค ์ฃผ์์ ๋ฌ๋ฉด์ ๊ณต๋ถํ๋๊ฑด ๋ฌผ๋ก ๊ฐ๋ฅ! (ํ์!)
- ํ์ง๋ง ์ ์ถ(๋ฐฐํฌ?)ํ๋ ํ๋ก์ ํธ์๋ ์ฃผ์ ์์ด๋ ๋ค๋ฅธ ์ฌ๋๋ค์ด ์ดํดํ ์ ์๋๋ก ์ ๊ฒฝ์จ์ ์์ฑํ๊ธฐ
๐๊ณผ์ ํ๊ธฐ
์ด๋ ต๋ค.. ๋๋ฌด์ด๋ ต๋ค...ใ ใ ์ฝ๋๋ฅผ ์ง๋๊ฒ๋ ์์ง ๊ธฐ์ด๊ฐ๋ ์์ค์ธ๋ฐ ๋ค๋ฅธ ์ฌ๋์ ์ฝ๋๋ฅผ ๋ณด๊ณ ๊ณ ์น๋ค๋ ๊ฒ..... ๋ฆฌ๋์ค ๊ณต๋ถ์ ํ์์ฑ์ ๋ ๋๊ผ๋ค ์ด๊ฑฐ์ ๋ง ๋์ด์ ๋ฏธ๋ฃฐ ์ ์๋ค.. ๋น์ฅ ์์ํด์ผ๋งํ๋ค... ์ง๋๋คํํ ์ฝ๋ ์ด๋ป๊ฒ ๋ณด๊ณ ๊ณ์๋๊ณ ์ฌ์ญค๋ณด๊ณ ์ต๋ํ ๋น์ทํ๊ฒ ์ดํดํ๋ ค๊ณ ๋ ธ๋ ฅํ๋ ๊ฒ ๊ฐ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฒน์น๋ ๋ถ๋ถ์ ์ฐพ์์ค๋ฉด ๊ดํ ๋ฐ๊ฐ๊ณ .. ๊ดํ ๋์ง๊ฐ ๋๋ผ๊ณ .. ๋ด์ ์น๋ฐ๊ฐ ๋ ์์ด๊ณ .. ๊ทธ๋ฌ๋ค. ๊ฒ๋์์ ๊ณ์ ์ฝ๋ ๊ฐ์ด ๋ณด๋ฉด์ ์๊ธฐํ๊ณ ์์ ํ๋๋ฐ ๋๋ถ ๋ค ์ ์พํ์๊ณ ์ ๋ชจ๋ฅด๋ ๋ถ๋ถ ๋ฌผ์ด๋ณด๋ฉด ์น์ ํ๊ฒ ์๋ ค์ฃผ์ ์ ๋ ๊ฐ์ฌํ๋ค.
๊ทธ๋ฆฌ๊ณ ๋ด๊ฐ ์ํ๋๋ฐ๋ฅผ ํ์คํ๊ฒ ๋งํ ์ ์๋๋ก ๊ธฐ์ด์ง์์ ํค์์ผ๊ฒ ๋ค๊ณ ๋๊ผ๋ค. ์ ๊ทธ๊ฑฐ๋ฅผ ์ด๋ ๊ฒํด์ ์ ์ชฝ์์... ๊ฐ ์๋๊ณ . ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ์ด๋์์ ์ด๋๋ก ์ด๋ป๊ฒ ๋๊ธฐ๋์ง! ํ์คํ๊ฒ! ์ค๋ช ํ ์ ์๋๋ก! ๋ ธ๋ ฅํด์ผ๊ฒ ๋ค. ๋ด๊ฐ ์ด์ํ๊ฒ ๋งํด๋ ์ฐฐ๋ก๊ฐ์ด ํด์ํด์ ์์ ์ฌํญ์ ๋ฐ์ํด์ฃผ์ ์ด๋ฒ ์ง๋๋ค์๊ฒ ๊ฐ์ฌ์ธ์ฌ๋ฅผ ์ฌ๋ฆฌ๋ฉฐ ์ด๋ฒ ํ๊ธฐ๋ ๋ง๋ฌด๋ฆฌ....... ์ด์ฌํํ์!
๐์ฐธ๊ณ (๊ฐ์ฌํฉ๋๋ค!)
https://junistory.blogspot.com/2017/06/css-ellipsis.html
CSS์์ ellipsis('...')๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ
Web๊ฐ๋ฐ, ์น๋์์ธ, ์น๊ธฐํ, IT์ ๋ณด, ์ฌํ์ ๋ณด, ๋ง์ง์ ๋ณด๋ฑ์ ๋ํด ๊ณต์ ํ๋ ๋ธ๋ก๊ทธ ์ ๋๋ค.
junistory.blogspot.com
https://webdir.tistory.com/483
CSS๋ก ๊ธ์ ์๋ฅด๊ธฐ - ํ ์ค, ์ฌ๋ฌ ์ค
๊ณ ์ ๋ ๋๋น๋ง์ ์ ๊ณตํ๋ ๋ ์ด์์์์๋ ์๋ฒ๋จ์์ ํ๋ฉด์ ์ถ๋ ฅํ ๊ธ์์๋ฅผ ๋ฏธ๋ฆฌ ๊ฐ๋ ํ๋ฉฐ ๋์์ธํ๊ธฐ๊ฐ ์์ํฉ๋๋ค. ๋ ์ด์์์ด ์ ๋์ ์ธ ๋๋น๋ฅผ ๊ฐ์ง๊ฑฐ๋ ์๋ฒ ์คํฌ๋ฆฝํธ์ชฝ์ ์ ๊ทผํ ์
webdir.tistory.com
lodash uniqBy() ๋ฉ์๋ ์์๋ณด๊ธฐ
lodash ๋ฉ์๋ ์ค ํ๋์ธ uniqBy() ๋ฉ์๋์ ๋ํ์ฌ ์์๋ด ๋๋ค.
webisfree.com
https://blog.rhostem.com/posts/2020-03-04-redux-toolkits
Redux Toolkit์ ํ์ฉํ React ์ํ ๊ด๋ฆฌ
ํ๋ก ํธ์๋ ์น ๊ฐ๋ฐ ๊ธฐ์ ๋ธ๋ก๊ทธ
blog.rhostem.com
https://medium.com/@caffeinick/es6-syntax-destructuring-assignment-9f37cb5817cf
ES6 Syntax — Destructuring Assignment
์ด ๊ธ์ MDN web docs์ ๋น๊ตฌ์กฐํ ํ ๋น ๋ฌธ์๋ฅผ ํ์ต๋ชฉ์ ์ผ๋ก ์ฒจ์ญํ ๊ธ์ ๋๋ค.
medium.com
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters
Rest parameters - JavaScript | MDN
The rest parameter syntax allows a function to accept an indefinite number of arguments as an array, providing a way to represent variadic functions in JavaScript.
developer.mozilla.org
'๐๊ณต๋ถ > ํ๋ฆฌ์จ๋ณด๋ฉ์ฝ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ฆฌ์จ๋ณด๋ฉ์ฝ์ค] 4์ฃผ์ฐจ - ๊ณผ์ 7 (0) | 2021.08.23 |
---|---|
[ํ๋ฆฌ์จ๋ณด๋ฉ์ฝ์ค] 4์ฃผ์ฐจ - ๊ณผ์ 6 (0) | 2021.08.18 |
[ํ๋ฆฌ์จ๋ณด๋ฉ์ฝ์ค] 2์ฃผ์ฐจ -๊ณผ์ 3(2) (0) | 2021.08.08 |
[ํ๋ฆฌ์จ๋ณด๋ฉ์ฝ์ค] 2์ฃผ์ฐจ -๊ณผ์ 3(1) (0) | 2021.08.04 |
[ํ๋ฆฌ์จ๋ณด๋ฉ์ฝ์ค] 1์ฃผ์ฐจ -๊ณผ์ 2 (0) | 2021.08.01 |
๋๊ธ