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 /> }
)