エラーブロック
ErrorBlockコンポーネントは、ReactとTypeScriptで構築された完全にカスタマイズ可能でアクセシブルなエラー表示コンポーネントです。モダンなデザインパターン、柔軟なカスタマイズオプション、カスタムエラーメッセージとアクションのサポートを備えた完全なエラーインターフェースを提供します。一貫したスタイリングのためにMUIコンポーネント上に構築されています。
🚀 インストール
npm install @nodeblocks/frontend-error-block@0.2.1
📖 使用法
import {ErrorBlock} from '@nodeblocks/frontend-error-block';
- 基本的な使用法
- 高度な使用法
function SimpleErrorBlock() { return ( <ErrorBlock errorTitle="何かが間違っています" subtitle="予期しないエラーが発生しました。もう一度お試しいただくか、問題が続く場合はサポートにお問い合わせください。" actionHref="#home" actionText="ホームに戻る" titleErrorCode="Error 404" > <ErrorBlock.Icon /> <ErrorBlock.Title /> <ErrorBlock.Subtitle /> <ErrorBlock.Action /> </ErrorBlock> ); }
function AdvancedErrorBlock() { return ( <ErrorBlock errorTitle="サーバー接続に失敗しました" subtitle="サーバーに接続できません。インターネット接続を確認して、もう一度お試しください。" actionHref="#dashboard" actionText="ダッシュボードに戻る" titleErrorCode="Error 500" className="custom-error-block" spacing={3} sx={{ backgroundColor: '#fafafa', border: '1px solid #e0e0e0', borderRadius: '8px', padding: '40px', maxWidth: '600px', margin: '0 auto', }} > {({defaultBlocks}) => ({ blocks: { ...defaultBlocks, troubleshooting: ( <div style={{ backgroundColor: '#e7f3ff', border: '1px solid #b3d9ff', borderRadius: '6px', padding: '16px', marginBottom: '24px', textAlign: 'left', }} > <h4 style={{ margin: '0 0 12px 0', color: '#0066cc', fontSize: '16px', fontWeight: 'bold', }} > 🔧 トラブルシューティング手順: </h4> <ul style={{ margin: '0', paddingLeft: '20px', color: '#333', fontSize: '14px', lineHeight: '1.5', }} > <li>インターネット接続を確認してください</li> <li>ページを更新してください(Ctrl+R または Cmd+R)</li> <li>ブラウザのキャッシュとCookieをクリアしてください</li> <li>数分後にもう一度お試しください</li> </ul> </div> ), support: ( <div style={{ marginTop: '24px', padding: '16px', backgroundColor: '#f8f9fa', border: '1px solid #dee2e6', borderRadius: '6px', textAlign: 'center', }} > <p style={{ margin: '0 0 8px 0', fontSize: '14px', color: '#6c757d', }} > まだ問題が解決しませんか? </p> <button style={{ padding: '8px 16px', backgroundColor: '#28a745', color: 'white', border: 'none', borderRadius: '4px', cursor: 'pointer', fontSize: '14px', fontWeight: 'bold', }} > 📞 サポートに連絡 </button> </div> ), }, blockOrder: ['icon', 'title', 'troubleshooting', 'subtitle', 'action', 'support'], })} </ErrorBlock> ); }
🔧 プロパティリファレンス
メインコンポーネントプロパティ
| プロパティ | 型 | デフォルト | 説明 |
|---|---|---|---|
errorTitle | string | 必須 | 目立つように表示されるエラーメッセージのタイトル |
subtitle | string | 必須 | エラーに関する追加のコンテキストを提供するサブタイトル |
actionHref | string | 必須 | アクションボタンナビゲーション用のURL |
actionText | string | 必須 | アクションボタンに表示するテキスト |
titleErrorCode | string | undefined | タイトルの上に表示されるエラーコード(例:"Error 404") |
spacing | number | string | 4 | 要素間のスペーシング(MUI Stackスペーシング) |
className | string | undefined | エラーコンテナのスタイリング用の追加CSSクラス名 |
sx | SxProps<Theme> | undefined | カスタムスタイリング用のMUIシステムプロパティ |
children | BlocksOverride | undefined | デフォルトレンダリングをオーバーライドするカスタムブロックコンポーネント |
注意: このコンポーネントはすべてのMUI Stackコンポーネントプロパティを継承します。
サブコンポーネント
ErrorBlockコンポーネントは複数のサブコンポーネントを提供します。すべてのサブコンポーネントは、メインコンポーネントのコンテキストからデフォルト値を受け取り、プロパティを通じてこれらの値をオーバーライドできます。
ErrorBlock.Icon
MUIの@mui/icons-materialからのErrorOutlineアイコンを使用してエラーアイコンをレンダリングします。
| プロパティ | 型 | デフォルト | 説明 |
|---|---|---|---|
sx | SxProps<Theme> | { fontSize: '3rem', color: theme.palette.secondary.main } | カスタムスタイリング用のMUIシステムプロパティ |
className | string | undefined | スタイリング用の追加CSSクラス名 |
注意: このコンポーネントはすべてのMUI SvgIconコンポーネントプロパティ(ErrorOutlineから)を継承します。
ErrorBlock.Title
MUI Typographyを使用してエラータイトルをレンダリングします。
| プロパティ | 型 | デフォルト | 説明 |
|---|---|---|---|
titleErrorCode | ReactNode | コンテキスト値 | タイトルの上に表示するエラーコード |
errorTitle | string | コンテキスト値 | タイトルコンテンツ(コンテキストをオーバーライド) |
children | ReactNode | コンテキストのerrorTitle | カスタムコンテンツ - errorTitleをオーバーライド |
variant | TypographyVariant | 'h4' | MUI Typographyバリアント |
sx | SxProps<Theme> | { color: theme.palette.secondary.main } | カスタムスタイリング用のMUIシステムプロパティ |
className | string | undefined | スタイリング用の追加CSSクラス名 |
注意: このコンポーネントはすべてのMUI Typographyコンポーネントプロパティを継承します。
ErrorBlock.Subtitle
MUI Typographyを使用してエラーサブタイトルをレンダリングします。
| プロパティ | 型 | デフォルト | 説明 |
|---|---|---|---|
subtitle | string | コンテキスト値 | サブタイトルコンテンツ(コンテキストをオーバーライド) |
children | ReactNode | コンテキストのsubtitle | カスタムコンテンツ - subtitleをオーバーライド |
sx | SxProps<Theme> | { color: theme.palette.secondary.main } | カスタムスタイリング用のMUIシステムプロパティ |
className | string | undefined | スタイリング用の追加CSSクラス名 |
注意: このコンポーネントはすべてのMUI Typographyコンポーネントプロパティを継承します。
ErrorBlock.Action
MUI Buttonを使用してアクションボタンをレンダリングします。
| プロパティ | 型 | デフォルト | 説明 |
|---|---|---|---|
actionHref | string | コンテキスト値 | ナビゲーション用のURL(コンテキストをオーバーライド) |
actionText | string | コンテキスト値 | ボタンテキスト(コンテキストをオーバーライド) |
children | ReactNode | コンテキストのactionText | カスタムコンテンツ - actionTextをオーバーライド |
href | string | コンテキストのactionHref | 直接のMUI Button href(actionHrefをオーバーライド) |
variant | ButtonVariant | 'contained' | MUI Buttonバリアント |
size | 'small' | 'medium' | 'large' | 'medium' | MUI Buttonサイズ |
className | string | undefined | スタイリング用の追加CSSクラス名 |
注意: このコンポーネントはすべてのMUI Buttonコンポーネントプロパティを継承します。
🎨 設定例
カスタムアイコンスタイリング
<ErrorBlock.Icon
sx={{
fontSize: '5rem',
color: 'warning.main',
backgroundColor: 'warning.light',
borderRadius: '50%',
padding: 2
}}
/>
カスタムタイポグラフィスタイリング
<ErrorBlock.Title
variant="h3"
sx={{
color: 'error.main',
fontWeight: 'bold',
textTransform: 'uppercase'
}}>
カスタムエラータイトル
</ErrorBlock.Title>
カスタムボタンスタイリング
<ErrorBlock.Action
variant="outlined"
color="secondary"
size="large"
startIcon={<HomeIcon />}
sx={{
borderRadius: 2,
textTransform: 'none'
}}>
ホームに戻る
</ErrorBlock.Action>
🔧 TypeScriptサポート
包括的な型定義による完全なTypeScriptサポート:
import {ErrorBlock} from '@nodeblocks/frontend-error-block';
import {StackProps, TypographyProps, ButtonProps} from '@mui/material';
// メインコンポーネントプロパティはMUI StackPropsを拡張
interface ErrorBlockProps extends Omit<StackProps, 'children'> {
errorTitle: string;
subtitle: string;
actionHref: string;
actionText: string;
titleErrorCode?: string;
children?: BlocksOverride;
}
// MUIプロパティカスタマイズの例
function CustomStyledErrorBlock() {
return (
<ErrorBlock
errorTitle="サーバーエラー"
subtitle="サーバーに問題が発生しています。後でもう一度お試しください。"
actionHref="#dashboard"
actionText="ダッシュボードに戻る"
titleErrorCode="Error 500"
spacing={3}
sx={{maxWidth: 500}}
>
<ErrorBlock.Icon sx={{fontSize: '4rem', color: 'error.main'}} />
<ErrorBlock.Title variant="h3" sx={{color: 'error.main'}}>
重大なサーバーエラー
</ErrorBlock.Title>
<ErrorBlock.Subtitle variant="body1" sx={{color: 'text.secondary'}}>
この問題の修正に取り組んでいます。数分後に更新してみてください。
</ErrorBlock.Subtitle>
<ErrorBlock.Action variant="outlined" size="large" href="#support" sx={{minWidth: 200}}>
サポートに連絡
</ErrorBlock.Action>
</ErrorBlock>
);
}
📝 注意事項
- コンポーネントはデフォルトで
spacing={4}のMUIStackを使用してレイアウトします - デフォルトの最大幅は400pxで、中央揃えのための自動水平マージンが設定されています
- すべてのサブコンポーネントはデフォルトで一貫した色付けのために
theme.palette.secondary.mainを使用します - Iconコンポーネントは
@mui/icons-materialのMUIErrorOutlineアイコンを使用します - Titleはデフォルトで
variant="h4"でレンダリングされます - Actionボタンはデフォルトで
variant="contained"とsize="medium"を使用します - すべてのサブコンポーネントはMUIシステムスタイリング用の
sxプロパティをサポートします - ブロックオーバーライドパターンにより、デフォルトブロック間にカスタムブロックを挿入できます
React、TypeScript、MUIを使用して❤️で構築されました。