Skip to Content
๐Ÿ‘€ Suspensive v3์—์„œ์˜ ๋ณ€๊ฒฝ์„ ํ™•์ธํ•˜์„ธ์š”. ๋”๋ณด๊ธฐ
๋ฌธ์„œ๋ณด๊ธฐ@suspensive/react<ErrorBoundaryGroup/>

ErrorBoundaryGroup

์ด ์ปดํฌ๋„ŒํŠธ๋กœ children์ธ <ErrorBoundary/>๋“ค์„ ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ค‘์ฒฉ๋œ <ErrorBoundaryGroup/>์˜ children์ธ <ErrorBoundary/>๋“ค๋„ ์ƒ์œ„ <ErrorBoundaryGroup.Consumer/>์œผ๋กœ๋„ reset๋ฉ๋‹ˆ๋‹ค.

import { ErrorBoundaryGroup, ErrorBoundary } from '@suspensive/react' const Example = () => ( <ErrorBoundaryGroup> {/* ErrorBoundaryGroup์˜ children์ธ ErrorBoundary๋ฅผ ๋ชจ๋‘ resetํ•ฉ๋‹ˆ๋‹ค. ์ค‘์ฒฉ๋œ ErrorBoundaryGroup๋‚ด์˜ ErrorBoundary๋„ ๋ชจ๋‘ resetํ•ฉ๋‹ˆ๋‹ค. */} <ErrorBoundaryGroup.Consumer> {(group) => <button onClick={group.reset}>Try again</button>} </ErrorBoundaryGroup.Consumer> <ErrorBoundary fallback={(props) => <>{props.error.message}</>}> <ErrorAfter2s /> </ErrorBoundary> <ErrorBoundaryGroup> <ErrorBoundaryGroup.Consumer> {(group) => <button onClick={group.reset}>Try again</button>} </ErrorBoundaryGroup.Consumer> <ErrorBoundary fallback={(props) => <>{props.error.message}</>}> <ErrorAfter2s /> </ErrorBoundary> </ErrorBoundaryGroup> </ErrorBoundaryGroup> )
import { ErrorBoundaryGroup, ErrorBoundary } from '@suspensive/react'
import { ErrorAfter2s } from './ErrorAfter2s'

export const Example = () => {
  return (
    <ErrorBoundaryGroup>
      <fieldset style={{ border: '1px solid red', padding: '10px' }}>
        <legend>Outer ErrorBoundaryGroup</legend>
        <ErrorBoundaryGroup.Consumer>
          {(group) => <button onClick={group.reset}>Try again</button>}
        </ErrorBoundaryGroup.Consumer>
        <ErrorBoundary fallback={(props) => <>{props.error.message}</>}>
          <ErrorAfter2s />
        </ErrorBoundary>

        <ErrorBoundaryGroup>
          <fieldset style={{ border: '1px solid blue', padding: '10px' }}>
            <legend>Inner ErrorBoundaryGroup</legend>
            <ErrorBoundaryGroup.Consumer>
              {(group) => <button onClick={group.reset}>Try again</button>}
            </ErrorBoundaryGroup.Consumer>

            <ErrorBoundary fallback={(props) => <>{props.error.message}</>}>
              <ErrorAfter2s />
            </ErrorBoundary>
          </fieldset>
        </ErrorBoundaryGroup>
      </fieldset>
    </ErrorBoundaryGroup>
  )
}

props.blockOutside

๋งŒ์•ฝ ์ƒ์œ„ <ErrorBoundaryGroup/>์— ์˜ํ•œ ํ•˜์œ„ <ErrorBoundaryGroup/>์˜ reset์„ ๋ง‰๊ณ  ์‹ถ๋‹ค๋ฉด blockOutside์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

import { ErrorBoundaryGroup, ErrorBoundary } from '@suspensive/react' const Example = () => ( <ErrorBoundaryGroup> <ErrorBoundaryGroup.Consumer> {(group) => <button onClick={group.reset}>Try again</button>} </ErrorBoundaryGroup.Consumer> <ErrorBoundary fallback={(props) => <>{props.error.message}</>}> <ErrorAfter2s /> </ErrorBoundary> {/* blockOutside prop์œผ๋กœ ์ƒ์œ„ ErrorBoundaryGroup์— ์˜ํ•œ reset์„ ๋ง‰์Šต๋‹ˆ๋‹ค. */} <ErrorBoundaryGroup blockOutside> <ErrorBoundaryGroup.Consumer> {(group) => <button onClick={group.reset}>Try again</button>} </ErrorBoundaryGroup.Consumer> <ErrorBoundary fallback={(props) => <>{props.error.message}</>}> <ErrorAfter2s /> </ErrorBoundary> </ErrorBoundaryGroup> </ErrorBoundaryGroup> )
import { ErrorBoundaryGroup, ErrorBoundary } from '@suspensive/react'
import { ErrorAfter2s } from './ErrorAfter2s'

export const Example = () => {
  return (
    <ErrorBoundaryGroup>
      <fieldset style={{ border: '1px solid red', padding: '10px' }}>
        <legend>Outer ErrorBoundaryGroup</legend>
        <ErrorBoundaryGroup.Consumer>
          {(group) => <button onClick={group.reset}>Try again</button>}
        </ErrorBoundaryGroup.Consumer>
        <ErrorBoundary fallback={(props) => <>{props.error.message}</>}>
          <ErrorAfter2s />
        </ErrorBoundary>

        <ErrorBoundaryGroup blockOutside>
          <fieldset style={{ border: '1px solid blue', padding: '10px' }}>
            <legend>Inner ErrorBoundaryGroup</legend>
            <ErrorBoundaryGroup.Consumer>
              {(group) => <button onClick={group.reset}>Try again</button>}
            </ErrorBoundaryGroup.Consumer>
            <ErrorBoundary fallback={(props) => <>{props.error.message}</>}>
              <ErrorAfter2s />
            </ErrorBoundary>
          </fieldset>
        </ErrorBoundaryGroup>
      </fieldset>
    </ErrorBoundaryGroup>
  )
}

ErrorBoundaryGroup.with

ErrorBoundaryGroup.with ErrorBoundaryGroup์„ ์‚ฌ์šฉํ•˜์—ฌ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ž˜ํ•‘ํ•˜๋Š” HOC์ž…๋‹ˆ๋‹ค. ErrorBoundaryGroup.with๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‰ฝ๊ฒŒ ๋ž˜ํ•‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

import { ErrorBoundaryGroup } from '@suspensive/react' const Example = ErrorBoundaryGroup.with({}, () => { return <>...</> })

ErrorBoundaryGroup.Consumer

ErrorBoundaryGroup.Consumer๋Š” ErrorBoundaryGroup์˜ Consumer์ž…๋‹ˆ๋‹ค. ErrorBoundaryGroup.Consumer๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ErrorBoundaryGroup์˜ reset์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

import { ErrorBoundaryGroup } from '@suspensive/react' const Example = () => ( <ErrorBoundaryGroup> <ErrorBoundaryGroup.Consumer> {(group) => <button onClick={group.reset}>Try again</button>} </ErrorBoundaryGroup.Consumer> <ErrorBoundary> <ErrorAfter2s /> </ErrorBoundary> </ErrorBoundaryGroup> )

useErrorBoundaryGroup

useErrorBoundaryGroup์„ ์‚ฌ์šฉํ•˜๋ฉด <ErrorBoundaryGroup/>๋‚ด์˜ <ErrorBoundary/>๋“ค์„ resetํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

import { useErrorBoundaryGroup } from '@suspensive/react' const Example = () => { const group = useErrorBoundaryGroup() return <button onClick={group.reset}>Try again</button> }
import { useErrorBoundaryGroup } from '@suspensive/react'

export const Button = () => {
  const group = useErrorBoundaryGroup()

  return <button onClick={group.reset}>Try again</button>
}
์ˆ˜์ •๋œ ๋‚ ์งœ: