Suspense
@suspensive/react์ <Suspense/>๋ React์ Suspense (opens in a new tab)๊ฐ ๋ฉ๋๋ค.
props.fallback
fallback์ react์ Suspense์ fallback์ ๋์ผํ๊ฒ ๋์ํฉ๋๋ค.
import { Suspense } from '@suspensive/react'
const Example = () => (
<Suspense fallback={<Loading />}>
<Children />
</Suspense>
)Default fallback
<Suspense/>๋ <SuspensiveProvider/>์ ํจ๊ป ์ฌ์ฉํ ๋ ๋์ฑ ๊ฐ๋ ฅํด์ง๋๋ค. <SuspensiveProvider/>๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ <Suspense/>์ default fallback๋ฅผ ์ ์ดํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ <SuspensiveProvider/> ํ์ด์ง์ ์๊ฐ๋์ด ์์ต๋๋ค.
์๋ฒ์ฌ์ด๋ ๋ ๋๋ง์ ํผํ๊ธฐ (clientOnly)
clientOnly prop์ ์ฌ์ฉํ๋ฉด <Suspense/>๋ ์๋ฒ์์๋ fallback์ ๋ฐํํฉ๋๋ค. mount ํ(ํด๋ผ์ด์ธํธ์์๋) children์ ๋ฐํํฉ๋๋ค. mount๋ ํด๋ผ์ด์ธํธ์์๋ง ์ผ์ด๋๊ธฐ ๋๋ฌธ์ ์๋ฒ์ฌ์ด๋ ๋ ๋๋ง์ ํผํ ์ ์์ต๋๋ค.
import { Suspense } from '@suspensive/react'
const Example = () => (
<Suspense clientOnly fallback={<Loading />}>
<Children />
</Suspense>
)SSR์ ์ง์ํ๋๋ก ์ ์ง์ ์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์
ํ๊ธฐ (<Suspense clientOnly/> -> <Suspense/>)
React.Suspense๋ฅผ SSR๊ณผ CSR์์ ๋ชจ๋ ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด <Suspense clientOnly/>์์ <Suspense/>๋ก ์ ์ง์ ์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์
ํ๋ฉด ์ฝ๊ฒ ์ ์ฉํ ์ ์์ต๋๋ค.
withSuspense
deprecated: wrap.Suspense().on์ ์ฌ์ฉํ์ธ์
withSuspense๋ฅผ ์ฌ์ฉํ๋ฉด ์ปดํฌ๋ํธ๋ฅผ <Suspense/>๋ก ์ฝ๊ฒ ๋ํํ ์ ์์ต๋๋ค.
์๋์ ๊ฐ์ด withSuspense๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ฅผ ๊ฐ์ธ๊ธฐ ์ํด ๋ถํ์ํ ์ฝ๋๋ฅผ ๋ง๋ค ํ์๊ฐ ์์ต๋๋ค.
withSuspense์ ๋ ๋ฒ์งธ ์ธ์๋ children์ด ์๋ <Suspense/>์ props์
๋๋ค.
import { withSuspense } from '@suspensive/react'
const Example = withSuspense(
function Component() {
// code make suspending
return <>...</>
},
{ fallback: <Spinner /> }
)