Divider ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋๋ฐ ์ํ๋ ๊ฒฐ๊ณผ๋ฅผ ์ป์ง๋ชปํ๋ค. (a + b + c) ์ ๊ฐ์ ๋ทฐ๋ฅผ ๋ง๋ค๊ณ ์ถ์๋ฐ (a + b +)์ ๊ฐ์ ๊ฒฐ๊ณผ ๋์ค๋ ์ํฉ.
๋๋ฐ์ด๋ ์ปดํฌ๋ํธ๋ฅผ ์๋์ ๊ฐ์ด ์ฌ์ฉ.
secondCare์กด์ฌ์ ๋ฐ๋ผ ์น ๋๋ฐ์ด 1๊ฐ์ผ์ง 2๊ฐ์ผ์ง ์ ํด์ง๋ ์ํฉ์ผ๋ก ์๊ฐํ๋ค.
<Divider
divider={<> + </>}
style={{justifyContent: 'start'}}
>
<BasicText h3 bold={700}>
{first_care?.name} ({first_care?.hour}์๊ฐ)
</BasicText>
{Boolean(second_care) && (
<BasicText h3 bold={700}>
{second_care?.name} ({second_care?.hour}์๊ฐ)
</BasicText>
)}
</Divider>
๋๋ฒ๊น ํด๋ณด๋ ์ด๋ฐ ์ด์ ์๋ค.
React.Children.map(children,(child,idx)=>{ ... })
์์ null๊ฐ์ด children์ผ๋ก ์ธ์๋์ด ๋ค์ด์๋ค.
๋ฌผ๋ก ์ ํจํ ์๋ฆฌ๋จผํธ๋ ์๋๋ค. (!React.isValidElement(child)
)
์ด์ ๋ children์ ReactNode๋ฅผ ๋ฐ๋๋ฐ
ReactNode์ ํ์
์ null์ด ํฌํจ๋์ด์๊ธฐ ๋๋ฌธ์ด๋ค.
type ReactNode = ReactChild | ReactFragment | ReactPortal | boolean | null | undefined;
์์ ์ >>
null์ญ์ cloneChild๋ก ์กด์ฌํ๊ธฐ์
divder์ ๊ธฐ๋ฅ์ ์ํํ์ง ๋ชปํ๋ค.
const Divider: React.FC<IDivider> = ({
children,
gap,
divider = <Split {...{gap}} />,
...restProps
}) => {
const lastChildIndex = React.Children.count(children) - 1
return (
<BasicFlex center {...restProps}>
{React.Children.map(children, (child, idx) => {
const cloneChild = React.isValidElement(child)
? React.cloneElement(child)
: child
return (
<>
{cloneChild} {lastChildIndex === idx ? null : divider}
</>
)
})}
</BasicFlex>
)
}
์์ ํ>>
cloneDvider๊ฐ null์ด๋ฉด ์๋ฌด๊ฒ๋ ๋ฐํํ์ง ์๋๋กํ๋ค.
idx๋ฅผ ๋ง์ง๋ง ์ธ๋ฑ์ค๊ฐ ์๋ ์ฒซ๋ฒ์งธ ์ธ๋ฑ์ค์ธ์ง ์ฌ๋ถ๋ก ํ์ธํ๋ ๋ก์ง์ผ๋ก ๋ณ๊ฒฝ์ด ํ์ํด์ก๋ค. null์ญ์ React.Children.count(children)์ ๊ฐฏ์๋ก ์นด์ดํ
๋์๊ธฐ ๋๋ฌธ์ ๋น๊ต ๊ธฐ์ค์ผ๋ก ํ๋นํ์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.
const Divider: React.FC<IDivider> = ({
children,
gap,
divider = <Split {...{gap}} />,
...restProps
}) => {
return (
<BasicFlex center {...restProps}>
{React.Children.map(children, (child, idx) => {
const cloneChild = React.isValidElement(child)
? React.cloneElement(child)
: child
if (!cloneChild) {
return null
}
return (
<>
{idx === 0 ? null : divider}
{cloneChild}
</>
)
})}
</BasicFlex>
)
}
export default Divider