์ฌ์ฉ์๊ฐ ์๋น์ค๋ฅผ ์ฌ์ฉํ๋ฉฐ ๋๋ผ๋ ๊ฒฝํ์ ์ง์ ๋ํ ์ผ์์ ๋์จ๋ค๊ณ ์๊ฐํ๋ค. ๋ง์ ๋๊ธฐ๋ค์ด ํ๋ก ํธ์ค๋๋ฅผ ๊ณต๋ถํ๋ค ๋ฐฑ์๋๋ก ๋ ๋ ๊ฒ๋ ๊ทธ ๋ํ ์ผ์ ์ฑ๊ธฐ๋๋ผ ์ง์ณ์์๋ค. ๋ฐ๋ฉด ๋๋ ๊ทธ ๋ํ ์ผ์ ๊ด์ฌ์ด ์์๋ค. ์ฌ์ฉ์ ๊ฒฝํ์ ๋ํด์ ๊ณ์ ๊ณ ๋ฏผํ๋๊ฒ ์ฌ๋ฐ์๋ค. ๋คํ์ด๋ผ๊ณ ํด์ผ ํ๋. ๋๋ถ์ ์ ๋ง ์ฌ๋ฐ๊ฒ ๊ณต๋ถํ๊ณ ์๋ค. ์์ฆ์ ์ปจํผ๋ฐ์ค ์์์ด๋ ์ํฐํด ๋ฐ์์ ์ปจํ ์ธ ๋ฅผ ๋ณด๋ฉด์ ์ํ๋ ์ปดํฌ๋ํธ ๊ด๋ฆฌ์ ํนํ ๊ด์ฌ์ ๊ฐ๊ณ ์๋ค. ์ค๊ฐ๊ณ ์ฌ๋ง ๋๋๋ฉด ๋ฐ๋ก ์ด ํ๋ก์ ํธ์๋ ๋์ ํด๋ณด๊ณ ์ถ์ ๊ฒ๋ค์ด ๋ง๋ค!!
์ด์ฅ๋ถํฐ ๋ง์ด ์๋๋ฐ, ๋ฑ ํค์ฆ์์๋ ์ฌ์ฉ์ ๊ฒฝํ๊ณผ ๊ด๋ จํด ๋ง์ ๊ณ ๋ฏผ์ ํ๋ค. ์ฑ์ด์ง๋ง ๋๋ถ๋ถ์ ๋ก์ง์ ์น์ผ๋ก ๊ตฌํํ๊ณ ์๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ํ๋ก์ ํธ์ ๋ ์ด์์์ ์ก์ ๋๋ถํฐ ์ต๋ํ '์ฑ'์ค๋ฝ๊ฒ ํด๋ณด๊ณ ์ ํ๋ค.
์ด๋ฐ ์์ฌ์ ๋ฑ ํค์ฆ๋ฅผ ์์ํ๊ธฐ ์ ๊ณ ์ค๋ฝ ํ๋ก์ ํธ๋ฅผ ํ ๋๋ ๋ง์ฐฌ๊ฐ์ง์๋ค. ์๋ธ๋ฆฌํ์๊ณผ ์นดํก ๋ฑ์ผ๋ก ํ๋ณด๋๊ณ ๊ณต์ ๋๋ ์๋น์ค ํน์ฑ์ ๋ชจ๋ฐ์ผ๋ก ์ด์ฉํ๋ ์ฌ์ฉ์๋ค์ด ๋ง๋ค๊ณ ์์ํ๊ธฐ ๋๋ฌธ์, ์ต๋ํ ์ฑ๊ณผ ๊ฐ์ ๋๋์ ๋ด๋ณด๊ธฐ ์ํด ๋ ธ๋ ฅํด์๋ค. ๋์ค์ ์์์ง๋ง ์ด๋ฐ ๊ณ ๋ฏผ์ ํ๋ ์ฌ๋์ด ๊ฝค ๋ง์๋์ง 'Applike' ๋ผ๋ ์ฉ์ด๋ ์์๋ค.
์ด๋ฒ ํฌ์คํ ์ ๋ฑ ํค์ฆ ์๋น์ค๋ฅผ ์ค๋นํ๋ฉด์ ์ด๋ ํ ๊ณ ๋ฏผ์ ํ๊ณ , ์ด๋ค ๊ธฐ์ ๋ก ํด๊ฒฐํ๋์ง์ ๋ํ ๊ธฐ๋ก์ด๋ค.
1. ๋ ์ด์์ ๊ตฌ์ฑ (Foreground, Background)
ํ๋ก์ ํธ์ ์ ์ฒด์ ์ธ ๋ ์ด์์์ ์ก์ ๋๋ถํฐ ์ต๋ํ '์ฑ'์ค๋ฝ๊ฒ ํด๋ณด๊ณ ์ ํ๋ค.
๋ชจ๋ ํ์ด์ง๋ค์ ๋ ๋ถ๋ฅ๋ก ๋๋๋ค. ํ, ๋๊ธธ ๋ชจ์๋ณด๊ธฐ, ๋ง์ดํ์ด์ง ๋ฑ์ ๋ฉ์ธํ๋ฉด๋ค์ ํ์ด์ง ์คํ์ ํญ์ ์๋์ ์๋ Background
๋ก. ๊ทธ ๋ฉ์ธํ๋ฉด๋ค์ ์๋ ๋ฒํผ๋ค์ ํด๋ฆญํด ์ด๋ํ ๋ค๋ฅธ ํ๋ฉด๋ค์ Foreground
๋ก ๋ถ๋ฅํ๋ค. Foreground๋ Background ์์ ์คํ์ฒ๋ผ ์์ธ๋ค. ๋ณดํต์ ์ ํ๋ฆฌ์ผ์ด์
์์ ์๋ํ๋ ๋ฐฉ์์ ๋ฐ๋ผํด๋ณด์๋ค.
// ํ๋ฉด ์๋จ์ 'AppBar'๋ฅผ ํจ๊ป ๋๋๋ง ํ๋ activity stack์ ์์ UI template
function ForegroundTemplate({
label,
children,
to,
customEvent,
}: ForegroundTemplateProps) {
return (
<Wrapper>
<AppBar label={label} to={to} customEvent={customEvent} />
<Screen>{children}</Screen>
</Wrapper>
);
}
// ํ๋ฉด ํ๋จ์ 'TapBar'๋ฅผ ํจ๊ป ๋๋๋ง ํ๋ activity stack์ ํ์ UI template
function BackgroundTemplate({ children }: BackgroundTemplateProps) {
return (
<Wrapper>
<TabBar />
<Screen>{children}</Screen>
</Wrapper>
);
}
์ฒ์ ์ ๋ฌ๋ฐ์ ํผ๊ทธ๋ง ๋์์ธ์ ๋ณด๊ณ ์ฝ๋๋ก ์ฎ๊ธฐ๋ฉฐ ๋ง์ด ๊ณ ๋ฏผํ๋ค. ๋ญ ์ด๋ฐ์์ด๋ค. BackgroundTemplate
์์๋ ํญ์ ํ๋จ ํญ๋ฐ๋ฅผ ๋ ๋๋งํ๊ณ , ForegroundTemplate
์์๋ ์๋จ ์ฑ๋ฐ๋ฅผ ๋ ๋๋งํ๋ค.
2. ๋ผ์ฐํ ๊ฐ ์ ๋๋ฉ์ด์
์ฑ์์๋ ํ๋ฉด ๊ฐ ์ด๋์, ๋ถ๋๋ฌ์ด ์ ๋๋ฉ์ด์
๊ณผ ํจ๊ป ๋ํ๋๋ค. React-transition-group
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ ๊ตฌํํ๋ค.
[๋ฑ ํค์ฆ] 6. React transition group ๋ผ์ฐํ ํธ๋์ง์ (1) - ๋์ ํ๊ธฐ
[๋ฑ ํค์ฆ] 7. React transition group ๋ผ์ฐํ ์ ๋๋ฉ์ด์ (2) - ๋ํ ์ผ ์ก๊ธฐ
๊ตฌ๊ธ์ ์ ๋ณด๊ฐ ์๊ฐ๋ณด๋ค ๋ณ๋ก ์์๊ณ , ๋ด ๊ฒฝ์ฐ์ฒ๋ผ ์๋ฒฝํ ์ฑ์ฒ๋ผ ๋์ํ๋ ํธ๋์ง์ ์ ๊ตฌํํด๋ณธ ๊ธฐ๋ก์ ๋ณด๊ธฐ ํ๋ค์๋ค. ๊ทธ๋์ ๋ ์ธ์ธํ ๊ธฐ๋ก์ ํ๋ ค๊ณ ๋ ธ๋ ฅํ๋ค. ์์ ๋งํฌ๋ ๊ธ์์ ์์ธํ ์ค๋ช ์ ๋ณผ ์ ์๋ค.
๋ฐ๋ก ์์์ ์์ฑํ๋ Foreground
ํ์ด์ง์ Background
ํ์ด์ง ๊ฐ์ ํธ๋์ง์
์ ๊ฒฝํํ ์ ์๋ค. ์ฒ์ ํ๋ก์ ํธ๋ฅผ ๊ตฌ์ฑํ ๋๋ถํฐ ์ฑ๊ณผ ๊ฐ์ UX๋ฅผ ๊ณ ๋ คํ ๋๋ถ์ ๋ ์์ํ๊ฒ ์์
ํ ์ ์์๋ค.
๋จ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ง ๋์ ํ๊ณ ๋๋๋๊ฒ ์๋๋ผ ๋ค์ํ ๋ํ ์ผ์ ๊ณ ๋ คํ๋ค.
- ๋ค๋ก๊ฐ๊ธฐ ์์๋ ๋ฐ๋๋ฐฉํฅ์ ์ ๋๋ฉ์ด์ ์ด ๋์จ๋ค. (ํฌ๊ฐ์ก๋ ํ์ด์ง๊ฐ ๋ค์ ๋๊ฐ๋ ๋ฏํ)
- ์์ ํฌ๊ฐ์ ธ์๋ ํ์ด์ง๊ฐ ์ด๋ํ ๋ ๋ ๋ง์ ๊ฑฐ๋ฆฌ๋ฅผ ์์ง์ธ๋ค. (Parallaxํ ์ ๋๋ฉ์ด์ )
- ํ์ด์ง๊ฐ ์ด๋๊ณผ ์ผ๋ฐ์ ์ธ step์ด ์๋ UI์ ์ ๋๋ฉ์ด์ ์ด ๋ค๋ฅด๋ค.
ํ์ด์ง ์ด๋ ๊ฐ ์ ๋๋ฉ์ด์ ๋ฟ๋ง์ด ์๋๋ผ ์ฑ ๋ด์ ๋ค์ํ ๊ณณ์์ ์ ์ ํ ์ ๋๋ฉ์ด์ ์ ๋ฃ์ด ์ฌ์ฉ์ ๊ฒฝํ์ ํฅ์์ํค๊ณ ์ ๋ ธ๋ ฅํ๋ค.
3. ๋ฐํ ์ํธ ํ์ฉ
์ฑ์์ ์ฌ์ฉํ๋ ๋ํ์ ์ธ UI ์ปดํฌ๋ํธ์ด๋ค. ๋ฑ ํค์ฆ ๋ด์์๋ ๊ต์ฅํ ๋ง์ ์ํฉ์ ๋ฐํ ์ํธ๋ฅผ ํ์ฉํ๊ณ ์๋ค. ์ฌ์ฉ์์ ์ก์ ์ ์ํด ํ๋ฉด ํ๋จ์์ ์ฌ๋ผ์ค๋ ์ปดํฌ๋ํธ๋ฅผ ๋งํ๋ค.
ํธ๋์ง์ ๊ทธ๋ฃน๊ณผ ๋ฐํ ์ํธ ์ ๋๋ฉ์ด์ ์ ๊ฐ์ด ๋ณด๋ ๋ถ๋๋ฝ๊ฒ ์ด์ด์ง๋๊ฒ ๊ต์ฅํ ๋ง์์ ๋ ๋ค.
react-spring-bottomsheet
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค. ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํน์ฑ์ ์ปค์คํ
ํ ์ ์๋๋ก ์ง์ ๋ ์คํ์ผ ์ธ์๋ ๋ฐ๊พธ๊ธฐ ํ๋ค์์ง๋ง, ์ง์ css ์์๋ฅผ !important
๋ก ๊ฐ์ ํด ๋ฐ๊พธ์ด ์ฐ๊ณ ์๋ค.
๋๊ธธ ๊ณ์ฝํ๊ธฐ ๊ณผ์ ์์ ์ฌ์ฉํ๋ ๋ฐํ ์ํธ ์ด์ธ์ ์๋น์ค ๊ณณ๊ณณ์์ ์ฌ์ฉํ๋ ๋ชจ๋ ๋ฐํ ์ํธ๋ ์ ์ญ์ผ๋ก ๊ด๋ฆฌ๋๊ณ ์๋ค. ๊ณ ์ค๋ฝ 2์ฐจ ํ๋ก์ ํธ์์ ๋ชจ๋ฌ ์ปดํฌ๋ํธ๋ฅผ ์ ์ญ์ผ๋ก ๊ด๋ฆฌํ๋ ๋ฐฉ์๊ณผ ๋น์ทํ๋ค. ๋๋ฌธ์ ๋ฐ๋ก ๊ธฐ๋ก์ ํ์ง ์์์.
๊ธฐํ๊ณผ ๋์์ธ์ด ๊ณ์ ๋์ด๋๊ณ ์์ ๋๋ฉด์ ๋ฐํ ์ํธ๋ค์ ์ข ๋ฅ๋ ๋ง์์ก๋ค. UI์ ์ก์ ์ ๋ฐ๋ผ ์ปดํฌ๋ํธ๋ฅผ ์ ์ ํ ๋ถ๋ฅํ๊ณ ์ฌ์ฉํ๊ณ ์๋ค.
ํน์ํ ๊ฒฝ์ฐ 3๊ฐ๋ฅผ ์ ์ธํ ๋ชจ๋ ๋ฐํ ์ํธ๋ฅผ ๋ค๊ฐ์ง ์ข ๋ฅ์ ์ปดํฌ๋ํธ๋ก ๋๋์๋ค. type๊ณผ mainAction, subAction ๋ฑ์ props๋ค์ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
// '๋งํฌ๊ฐ ๋ง๋ฃ๋์์ด์' ๋ฐํ
์ํธ
const openExpiredNoticeSheet = (handler: () => void) => {
setOpenBottomSheet({
sheetContent: 'Notice',
contentProps: {
type: 'expired',
onMainActionClick: handler,
},
});
};
๋ฐํ
์ํธ๋ฅผ ์ฌ๋ ํจ์๋ ์ด๋ ๊ฒ ์ถ์ํํด์ ์ฌ์ฉํ ์ ์๋ค. sheetContent
๋ก๋ ์์์ ๋ถ๋ฅํ ๋ค๊ฐ์ง ์ปดํฌ๋ํธ ์ค ํ๋๋ฅผ, contentProps
๋ก๋ ๊ทธ ์ปดํฌ๋ํธ์ ๋ค์ด๊ฐ props๋ฅผ ์์ฑํ๋ค. ๊ฐ๋จํ๋ค!
4. ์น์์ Input ํ๊ทธ, ํคํจ๋ ์ ๋ฒํผ ๋ค๋ฃจ๊ธฐ
์ฌ์ฉ์๊ฐ ์ต๋ํ ๊ท์ฐฎ์์ ๋๋ผ์ง ์๋๋ก ํ๊ธฐ ์ํด ๋ถํ์ํ ์ก์ ์ ์ค์ด๋๋ก ๋ ธ๋ ฅํ๋ค. ์๋๋ ์ฌ์ฉ์์๊ฒ ๋ค์ํ ์ ๋ ฅ์ ๋ฐ์์ผ ํ๋ ์จ๋ณด๋ฉ๊ณผ ๋๊ธธ ๊ณ์ฝํ๊ธฐ ๊ณผ์ ์ด๋ค.
![]() |
![]() |
---|
์ฒซ ํ์ด์ง์ ์ง์ ์ ์ ๋ ฅ์ฐฝ์ autoFocus๋๊ณ , ๊ฐ ์ ๋ ฅ์ด ์๋ฃ๋๋ฉด ์ ํจ์ฑ ๊ฒ์ฌ ํ์ ์๋์ผ๋ก ๋ค์ input์ผ๋ก focus๋๋ค. ์๋ ์์ผ์ ์์์ ๋๊ฐ์ด ๋ง์ถ์ง ์์๋ ํด๋ผ์ด์ธํธ ๋จ์์ ํ๊ฐ๊ณต ํ์ ํต์ผ๋ ํํ๋ก ์๋ฒ๋ก ์ ์กํ๋๋ก ํ๋ค.
๋๊ธธ ๊ณ์ฝํ๊ธฐ์์๋ ํนํ ๋ค์ํ ์ ๋ ฅ์ ๋ฐ์์ผ ํ๋ค. ๋๊ธธ ์ด๋ฆ, ์ด ๊ธ์ก, ์ด์์จ, ๋งค์ฃผ ์ ๊ธ์ก ๋ฑ์ด ์๋ค. ๊ฐ ์ ๋ ฅ๋ง๋ค ์ธํฐ๋ํฐ๋ธํ ์์๋ฅผ ๋ฃ์ด ๊ท์ฐฎ์ ๋์ ์ฌ๋ฏธ ์์๋ฅผ ์ค ์ ์์๋ค. ํนํ ์ซ์๋ฅผ ์ ๋ ฅํด์ผ ํ๋ ์ฐฝ์ ๊ณ์ฐ๊ธฐ ํํ์ ๋ฒํผ๊ณผ ์ฌ๋ผ์ด๋ ๋ฐ๋ฅผ ์ด์ฉํด ์ฌ์ฉ์์ ๋ถํธํจ์ ํด์ํ๋ค.
ํคํจ๋์ ๋ทฐํฌํธ
๋ฑ ํค์ฆ์์๋ ํด๋น์ฌํญ์ด ์์์ง๋ง, ๋ชจ๋ฐ์ผ ์น์ ๊ตฌํํ๋ฉด์ ๋ค๋ค ํ๋ฒ์ฏค ๋ง๋ฌ์ ๋ฌธ์ ๊ฐ ์๋ค. ํคํจ๋๊ฐ ์ฌ๋ผ์ฌ๋ ์๋๋ก์ด๋ ๋ธ๋ผ์ฐ์ ์ ์ฌํ๋ฆฌ ๋ธ๋ผ์ฐ์ ๋ ๋ค๋ฅด๊ฒ ์๋ํ๋ค. ํ๋จ ๋ฒํผ์ fix ๋ฑ์ผ๋ก ๊ณ ์ ํ์๋๋ ๋ทฐํฌํธ์ ํ๋จ์ ์๋ฆฌ์ก๊ฒ ๋๋ค. ํ์ง๋ง ์๋๋ก์ด๋ ๋ธ๋ผ์ฐ์ ์์๋ ํคํจ๋๊ฐ ์ฌ๋ผ์ฌ๋, ๋ทฐํฌํธ๊ฐ ํ๋ฉด์์ ํคํจ๋๋ฅผ ์ ์ธํ ๋ถ๋ถ์ผ๋ก ๋ฐ๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ํ๋จ์ ๊ณ ์ ํ ๋ฒํผ์ด ํคํจ๋ ์๋ก ์ฌ๋ผ์ค๊ฒ ๋๋ ๊ฒ. ๋ฌผ๋ก ํ ์ค ๊ฐ์ ์๋น์ค๋ฅผ ๋ณด๋ฉด ํคํจ๋ ์์ ๋ฒํผ์ด ์ฌ๋ผ์ค๋๋ก ์๋๋ ๋์์ธ์ด ์์ง๋ง, ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ์๋ ์๋นํ ๋ฉ๋ถ ํฌ์ธํธ๊ฐ ๋๋ค.
๊ณ ์ค๋ฝ 2์ฐจ ํ๋ก์ ํธ์์ ์ ํ๋ฒํธ์ ์ด๋ฆ์ ๋ฐ๋ ํ์ด์ง์ด๋ค. ์๋๋ก์ด๋๋ IOS์ ๋ฌ๋ฆฌ, ์ฌ์ง๊ณผ ๊ฐ์ด ํ๋จ ๊ณ ์ ๋ฒํผ์ด ํคํจ๋ ์๋ก ์ฌ๋ผ์จ๋ค. ์ด ๋ ๋ฒํผ์ด input Form ๋ถ๋ถ์ ๊ฐ๋ฆฌ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. ๊ฐ๋ฐ์ ๋๋ถ๋ถ์ด ์์ดํฐ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ QA ์ด์ ์๋ ๋ฏธ์ฒ ์์ง ๋ชปํ๋ ๋ถ๋ถ์ด์๋ค. ๋ทฐํฌํธ์ ๋์ด๊ฐ ๋ฐ๋๋๊ฑธ ๊ฐ์งํด์ ์ผ์ ๋์ด ์ดํ์ผ ๋๋ ํคํจ๋๊ฐ ์ฌ๋ผ์๋ค๊ณ ํ๋จํด ๋ฒํผ์ ๋ณด์ฌ์ฃผ์ง ์๋ ๊ฒ์ผ๋ก ํด๊ฒฐํ๋ค. ๋ฒํผ์ด ์๋๋ผ๋ ์ ํด์ง ๊ธ์์๋งํผ ์ ๋ ฅํ๋ฉด ์๋์ผ๋ก blur ๋๋๋ก ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ๋ถํธํจ์ ์ ํ ์์๋ค.
5. ํ ๊ธ ๋ฒํผ (๋ก์ปฌ ์คํ ๋ฆฌ์ง ์บ์ฑ)
ํธ์ฌ ์๋ฆผ ๋์๋ฅผ ๋ฐ๋ ์ค์ ํ์ด์ง์ด๋ค. ์ฑ๊ณผ ๊ฐ์ ํ ๊ธ ๋์์ธ๊ณผ ์ ๋๋ฉ์ด์ ์ ๊ตฌํํ๋ค.
์๋ฆผ ๋์ ์ฌ๋ถ ์ ๋ณด๋ ์๋ฒ์์ ๊ฐ์ง๊ณ ์๋ค. ์๋ฆผ ์ค์ ํ์ด์ง์ ๋ค์ด์์ ๋ ๋ฐ์ดํฐ๋ฅผ ํจ์นญํ๊ธฐ์ ์ฌ์ฉ์๊ฐ ๋ค์ด์ฌ๋๋ง๋ค ๋งค๋ฒ ๋ก๋ฉ์ ๊ธฐ๋ค๋ฆฌ๋๋ก ํ๋๊ฒ ๋ง์์ ๋ค์ง ์์๋ค. ์๋ฆผ ๋์ ์ฌ๋ถ๋ ์์ฃผ ๋ณํ์ง ์๋ ๊ฐ์ด๋ฏ๋ก ๋ก์ปฌ ์คํ ๋ฆฌ์ง์ ์ ์ฅ๋ ๊ฐ์ ์ฐ์ ์ ์ผ๋ก ๋ณด์ฌ์ฃผ๋๋ก ํ๋ค. ๊ทธ ์ดํ ๋ง์ฝ ์ฌ์ฉ์๊ฐ ํ ๊ธํ๋ฉด ์๋ฒ๋ก Patch ์์ฒญ์ ํ๊ฒ ๋๊ณ , ๊ทธ ์๋ต๊ฐ์ผ๋ก ๋ค์ ์๋ฒ ์ํ์ ํด๋ผ์ด์ธํธ ์ํ(๋ก์ปฌ ์คํ ๋ฆฌ์ง)๋ฅผ ๋๊ธฐํํ๋ค.
const [alert, setAlert] = useState<IOptInDTO>(getLocalStorage('alert') || {});
// ๋ก์ปฌ ์ ์ฅ์์ ๊ฐ ์์ ์ ๊ฐ ํจ์นญํด์ ์ฌ์ฉ
const syncAlert = (data: IOptInDTO) => {
setLocalStorage('alert', data);
setAlert(data);
};
const { data } = useQuery(queryKeys.USER_OPTIN, userAPI.getUserOptIn, {
enabled: isEmptyObject(alert),
onSuccess: (res) => syncAlert(res),
});
6. highlight ์์ ์ ๊ฑฐ
์น๋ทฐ์์ ๋ฒํผ์ ํฐ์นํ์ ๋ ๋์ค๋ ํ๋์ ๋๋ ํ์์ ์์์ css ์ค์ ์ ํตํด ์ ๊ฑฐํ ์ ์๋ค. ๊ฐ์ชฝ๊ฐ์ ์ฑ์ ํ๋ฐ์ง.
noSelect {
-webkit-tap-highlight-color: transparent;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
noSelect:focus {
outline: none !important;
}