-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weโll occasionally send you account related emails.
Already on GitHub? Sign in to your account
implement List molecule component/#18 #27
Conversation
๐storybook: https://65ccb85d5afe55a024495bc0-wimyryyliz.chromatic.com/ |
app/ui/view/molecule/list/index.tsx
Outdated
export function List({ children }: ListProps) { | ||
const getChildren = (type: typeof ListHeader | typeof ListRow) => { | ||
const childrenArray = Children.toArray(children); | ||
return childrenArray.filter((child) => isValidElement(child) && child.type === type); | ||
}; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
[request change]
- ์ด๋ ๊ฒ ํจ์ํ ์ปดํฌ๋ํธ ๋ด๋ถ์ ํจ์๋ฅผ ์ ์ธํ๋ฉด, ๋ฆฌ๋ ๋๋งํ ๋๋ง๋ค ํจ์๊ฐ ์ฌ์์ฑ๋ฉ๋๋ค.
- ํด๋น ํจ์๋ List ํจ์ ๋ฐ๊นฅ์ผ๋ก ๋นผ๋ ๋ฌธ์ ๊ฐ ์์ด ๋ณด์ฌ์ ๋นผ๋๊ฒ ์ข์ ๋ณด์ ๋๋ค.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
๋ํ
์ผ์ ์ ๊ฒฝ์ฐ์ง ๋ชปํ๋ค์ ์์ ํ์ต๋๋ค!
91f3565
key={index} | ||
className={twMerge( | ||
'text-[#7590ff] leading-4 text-lg font-bold w-[19%] text-center', | ||
columns.length === 5 ? 'w-[19%]' : 'w-[33%]', |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
[request change]
- ํด๋น ์ํฉ์๋ grid๋ฅผ ์ฌ์ฉํ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค์! width๋ก ์ค์ ํ๋๊ฑด ์ ๊ฐ ํ๊ฒ ์ง๋ง ๋ณ๋ก์ธ ๊ฒ ๊ฐ์ต๋๋ค.
app/ui/view/molecule/list/index.tsx
Outdated
children: ReactNode; | ||
}; | ||
|
||
export function List({ children }: ListProps) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
[comment]
- ๋ฆฌ์คํธ์์๋ ์ปดํ์ด๋ ํจํด๊ณผ ๋น์ทํ ๋ฐฉ์์ผ๋ก ๋ ๋ ํ๋กญ์ค ํจํด์ ์์ฃผ ์ฌ์ฉํฉ๋๋ค.
- ์ด ํจํด์ ์ฌ์ฉํ๋ฉด, ์ปดํ์ด๋ ํจํด์ฒ๋ผ ์์กด์ฑ์ ์ญ์ ์ํค๊ณ ์ธํฐํ์ด์ค๋ฅผ ๋ถ๋ฆฌํ๋ ์ฅ์ ์ด ์์ต๋๋ค.
- ๋ํ, list์ ๊ฐ์ ์๋ฃ๊ตฌ์กฐ์ UI์ ์ ํฉํ ํจํด์ ๋๋ค.
- ๋งํฌ๋ฅผ ์ฒจ๋ถํ๋, ํ๋ฒ ํ์ธํ์๊ณ ์ด ํจํด์ด ์ข์๋ณด์ด๋ฉด ์ ์ฉํด๋ ์ข์ ๋ฏ ํ๋ค์!
- https://www.patterns.dev/react/render-props-pattern
app/ui/view/molecule/list/index.tsx
Outdated
List.Header = ListHeader; | ||
List.Row = ListRow; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
[comment]
- ์ ๋ ๊ฐ๋ ์ฑ ์ธก๋ฉด์์ assign์ ์ฌ์ฉํ๋๊ฒ ๋ ์ข๋ค๊ณ ์๊ฐํ์ด์!
- ๊ฐ๊ฐ ์ปดํฌ๋ํธ๊ฐ ๋ฐ๋ก ์ฌ์ฉ๋๋๊ฒ ์๋๋ผ ์ปดํ์ดํธ ํจํด์ด ์ ์ฉ๋ ์๋ธ ์ปดํฌ๋ํธ์์ด ๋ ๋ช ํํ๊ฒ ๋๋ฌ๋๊ธฐ ๋๋ฌธ์ ๋๋ค.
- ์๋ ๋งํฌ์์ ์๊ฐ์ ์ป์์ด์ ์ฒจ๋ถํ ๊ฒ์
https://fe-developers.kakaoent.com/2022/220731-composition-component/#3-3-%EB%A9%94%EC%9D%B8--%EC%84%9C%EB%B8%8C-%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8%EB%A5%BC-%EB%AC%B6%EC%96%B4%EC%84%9C-export - (๊ทธ๋ฆฌ๊ณ ์ฌ์ค ์ด๊ฑด ์ ํํ ๊ธฐ์ต์ ์๋๋๋ฐ assign์ ์ฌ์ฉํด์ผํ๋ ๋ ๋ค๋ฅธ ๊ธฐ์ ์ ์ด์ ๋ ์์๋ ๊ฒ ๊ฐ์์. ์ฐพ์ผ๋ฉด ์ด๊ฑด ๋ค์ ๋ง์๋๋ฆฌ๊ฒ ์ต๋๋ค)
columns: string[]; | ||
}; | ||
|
||
export function ListHeader({ columns }: ListHeaderProps) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
[requset change]
- named export๋ฅผ ์ฌ์ฉํ์ฌ ์ปดํฌ๋ํธ๋ฅผ ๋ด๋ณด๋ด๋ ๊ฒ์ ์งํฅํ๋ ์ด์ ๊ฐ ์๋์?
- ์ ๋ React์ Next์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์์ฑํ๋ ํ ํ๋ฆฟ์ด export default์ด๊ธฐ ๋๋ฌธ์, ์ด๋ฅผ ํ์ค์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ ์ ์ํฉ๋๋ค.
- ๋ํ, ์ถ๊ฐ์ ์ผ๋ก ์ปดํ์ด๋ ํจํด์ ์ฌ์ฉํ ๋๋, ํ์ ์ปดํฌ๋ํธ์ named export๋ฅผ ์ฌ์ฉํ๊ณ , ์ปดํ์ด๋ ํจํด์ ๋ฃจํธ ์ปดํฌ๋ํธ์๋ default export๋ฅผ ์ ์ฉํ๋ฉด ์ปดํฌ๋ํธ๋ฅผ ๋ถ๋ฆฌํ๋ ๊ฒ์ด ๋ ๋ช ํํด์ง ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- ์ถ๊ฐ๋ก, default export๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ผ์ด ํ๋์ ์ฑ ์๋ง์ ๊ฐ์ง๋๋ก ์ด๋ ์ ๋ ๊ฐ์ ํ ์ ์์ด ์ข๋ค๊ณ ์๊ฐํฉ๋๋ค.
- ๋ง์ฝ ์ปดํฌ๋ํธ ํ์ผ์์ ์ฌ๋ฌ ํจ์๋ ํ์ ์ปดํฌ๋ํธ๋ฅผ exportํ๊ณ ์๋ค๋ฉด, ๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ๊ฐ ์ ์ด๋ฃจ์ด์ง์ง ์์๋ค๊ณ ํ๋จ๋ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ด๋ฅผ ๋ฐฉ์งํ๋ ๋ฐ์๋ ์ ์ฉํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
List์ ๊ฒฝ์ฐ์๋ default export๋ฅผ ์ ์ฉํ์ ๋ ์๋ ๋ฌธ์ ๊ฐ ์๋ ๊ฑธ ํ์ธํ์ต๋๋ค
- List๋ List header์ List row๋ผ๋ ์ปดํฌ๋ํธ๋ฅผ ๊ฐ์ง๊ณ ์๋๋ฐ export default๋ง ํด์ค ๊ฒฝ์ฐ List component๋ง export๋ฅผ ํด์ฃผ๊ธฐ์ story book์์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค
- ๊ทธ๋์ List์ ๊ฒฝ์ฐ์๋ default export๋ฅผ ์ฌ์ฉํ์ง ์์์ต๋๋ค
์ถ๊ฐ์ ์ผ๋ก ๊ถ๊ธํ ๊ฒ ์๋๋ฐ, compound pattern์ ์์ด์ ํ์ ์ปดํฌ๋ํธ๋ผ๋ named export๋ฅผ ์ฌ์ฉํ๋ ๊ฒ ๋ ๋ช ํํด์ง๊ฑฐ๋ผ๊ณ ๋ง์ํ์ จ๋๋ฐ ํ์ ์ปดํฌ๋ํธ๋ผ๋ ํ์ผ์์๋ ํ๋์ ์ฑ ์๋ง ๊ฐ์ง๋ฏ๋ก default export ๋ฅผ ์ ์ฉํ๋ ๊ฒ ๋ ์ข์ง์์๊น์??
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
์ ๋ ์ด์ ๋น์ทํ ๋ฌธ์ ๋ฅผ ์ด์ ์ ๊ฒฝํํ ์ ์ด ์์๋ ๊ฒ ๊ฐ๋ค์. ์ ๊ฐ ์ฌ์ฉํ select ์ปดํฌ๋ํธ์ฒ๋ผ, index ํ์ผ์์ assign์ผ๋ก ๋ฌถ์ด์ export default๋ฅผ ์ฌ์ฉํด ๋ณด์๋ ๊ฑด ์ด๋จ๊น์?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Compound ํจํด์์ ํ์ ์ปดํฌ๋ํธ์ named export๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ ์ํ๋ ์ด์ ๋, ๋ ๋ฆฝ์ ์ผ๋ก ์ฌ์ฉ๋๋ ์ปดํฌ๋ํธ๋ ๋ชจ๋ default export๋ฅผ ํ๊ณ , ํ์ ์ปดํฌ๋ํธ๋ named export๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด, ๋ค๋ฅธ ๊ณณ์์ import ํ ๋ ์ด ์ปดํฌ๋ํธ๊ฐ ๋ ๋ฆฝ๋ ์ปดํฌ๋ํธ์ธ์ง, ์๋๋ฉด ํ์ ์ปดํฌ๋ํธ์ธ์ง ๋ช ํํ๊ฒ ๊ตฌ๋ถํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
import ListHeader from '../../..'; // ํ์ ์ปดํฌ๋ํธ์ธ์ง ์ ์ ์์
import { ListHeader } from '../../'; // ListHeader๋ ํ์ ์ปดํฌ๋ํธ์์ ์ ์ ์์
import List from '../../'; // List๋ ๋
๋ฆฝ์ ์ธ ์ปดํฌ๋ํธ์์ ์ ์ ์์
์ด์ ๋์ผํ ์ด์ ๋ก, ๋ ๋ฆฝ์ ์ธ ์ปดํฌ๋ํธ๋ default export๋ก ํต์ผํ๋ฉด ๊ตฌ๋ถ์ด ๋์ฑ ๋ช ํํด์ง๋๋ค. ๋ฐ๋ผ์ List ์ปดํฌ๋ํธ๋ฅผ export default๋ก ๋ณ๊ฒฝํ๋ ๊ฒ์ด ์ข์ ๋ณด์ ๋๋ค!
app/ui/view/molecule/list/index.tsx
Outdated
import { ListHeader } from './list-header'; | ||
import { ListRow } from './list-row'; | ||
|
||
type ListProps = { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
type ๋ฐ interface ์ค ์ ์ฉํ์๋ ๊ธฐ์ค์ด ์์ผ์ ๊ฐ์?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
interface๋ type ์ด๋ค ๊ฑธ ์ฌ์ฉํ๋ ์๊ด์ด ์์ ๋๋ ํต์ผ์ฑ์ ์ํด ํ์๋ค๊ณผ ๋ง์ถฐ ์ฌ์ฉํ๋ ํธ์
๋๋ค
ํด๋น ์ฝ๋์์๋ select component์ ํต์ผ์ฑ์ ์ํด์ type์ ์ฌ์ฉํ์ต๋๋ค!
๋ฒํผ ๊ธฐ๋ฅ์ ์์ํ๊ฒ list๊ฐ ํ๋ ์ญํ ์ด ์๋๋ฐ, ๊ธฐ์กด ์ฝ๋์์๋ ์ญํ ์ด์์ list component๊ฐ ํด์ฃผ๊ณ ์๋ค๊ณ ๋๊ผ์ต๋๋ค. ๋ฆฌ์คํธ๋ด ๋ฒํผ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ธฐ ์ํด์ ๋ ๋ค๋ฅธ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค์ด์ฃผ์ด์ผํ์ง๋ง, list component์ button์ด ์๋ ํ์ฌ ์ํ๋ ์ถฉ๋ถํ๋ค๊ณ ์๊ฐํฉ๋๋ค. |
๐storybook: https://65ccb85d5afe55a024495bc0-vkkckraygg.chromatic.com/ |
์ ๋ ์๋์ ๊ฐ์ด ์ฝ๋๋ฅผ ๊ตฌํํ๋ ค ํ์ต๋๋ค
์ ๋ฐฉ์์ button์ ์ํ component๋ฅผ ๊ตฌํํ ๊ฒ ์๋๊ณ ๋จ์ง list๊ฐ trigger ์ญํ ์ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค! |
๐storybook: https://65ccb85d5afe55a024495bc0-lpbvrtpked.chromatic.com/ |
์ ๊ฒฝ ์จ์ ์๊ฒฌ๊ณผ ๋น์ทํ๋ฐ, actionbutton๋ฟ๋ง ์๋๋ผ ListRow ์ปดํฌ๋ํธ์ invalid ์์ฑ์ด ์๋ ๊ฒ์ด ์กฐ๊ธ ์ด์ํ๊ฒ ๋๊ปด์ง๋๋ค. ๋ ์์ฑ ๋ชจ๋ List์ ListRow๋ณด๋ค๋ ๊ธฐ์ด์ ๊ณผ๋ชฉ ๋ฆฌ์คํธ๋ฅผ ์ํ ์์ฑ์ด๋ผ์ ๊ทธ๋ฐ ๊ฒ ๊ฐ์ต๋๋ค. ์ ์๊ฐ์๋ ๋ค์ ๋ ๊ฐ์ง ๋ฐฉ์์ด ์์ ๊ฒ ๊ฐ์ต๋๋ค:
์ธ ๋ถ ๋ชจ๋ ๊ด๋ จ ์ฌ์์ ๋ํ ์๊ฒฌ์ ์ฃผ์ จ์ผ๋ ์ฑํ ์ผ๋ก ์งํํ๋ ๊ฒ๋ ์ข์ง๋ง, ์๊ฐ์ด ์ง์ฒด๋ ์ ์์ผ๋ฏ๋ก ๋ณด์ด์ค๋ก ํ ๋ฒ ์ด์ผ๊ธฐํด ๋ณด๋ ๊ฒ์ ์ด๋จ๊น์? |
๐storybook: https://65ccb85d5afe55a024495bc0-wjlcetbcqq.chromatic.com/ |
๐storybook: https://65ccb85d5afe55a024495bc0-sxmlyfbqwy.chromatic.com/ |
@yougyung @seonghunYang list component ๋ฆฌํฉํ ๋ง์ ํด์ push ํ์ต๋๋ค! ๊ตฌํํ๋ฉด์ ์๋์ ๊ฐ์ ์ ๋ค์ ๋๊ผ์ต๋๋ค
|
๐storybook: https://65ccb85d5afe55a024495bc0-snceiirrkn.chromatic.com/ |
๐storybook: https://65ccb85d5afe55a024495bc0-uyfzfmuiro.chromatic.com/ |
๐storybook: https://65ccb85d5afe55a024495bc0-zabngcltfo.chromatic.com/ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- ํ์ธํ์ต๋๋ค. ๊ณ ์ํ์ จ์ด์!
๐ ์์ ๋ด์ฉ
์ถ๊ฐ,์ญ์ ๋ฒํผ์ด list row์ ์กด์ฌํ ์ ์๋๋ก ์์ ์ด ํ์ํฉ๋๋ค!
์ด ๋ถ๋ถ์ ๊ธฐ์ด์ ๊ณผ๋ชฉ ์ญ์ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ฉด์ ์์ ํ ์์ ์ ๋๋ค
๐ค ๊ณ ๋ฏผ ํ๋ ๋ถ๋ถ
table-layout: fixed;
์์ฑ์ ์ฌ์ฉํ๋ ค ํ์ง๋ง, ์๋ ๋ ๊ฐ์ง ์ด์ ๋ก ๊ธฐ์กด ์กธ๋ถ ์ฝ๋๋ ๋น์ทํ๊ฒ width 19%, width 33%๋ก ๊ฐ์ ธ๊ฐ์ต๋๋ค
๋ ์ข์ ๋ฐฉ๋ฒ์ด ์์๊น์?
๐ ๋์์ด ํ์ํ ๋ถ๋ถ
object.assign ์ฌ์ฉํ์ง ์๋๊ฒ ๋ ํ ๋์ ๋ค์ด์ค๋ ๊ฒ ๊ฐ์์ ์ฌ์ฉํ์ง๋ ์์๋๋ฐ, select component๋ ๋น์ทํ ๊ตฌํ ๋ฐฉ์์ ๊ฐ์ ธ๊ฐ๋๊ฒ ํต์ผ์ฑ์ ๋ ์ข์๊น์??
https://fe-developers.kakaoent.com/2022/220731-composition-component/
https://im-developer.tistory.com/238