ユーザインタフェースコンポーネントの状態駆動開発
5976 ワード
私はよく、簡単にする必要があるユーザインタフェースの状態を記述するコードを見ます.
ユーザーのリストを出力するコードを見ましょう.
私は別の方法を好む.私は有限状態機械の理論について読みました.状態機械は有限状態の状態を持ち、各瞬間にこれらの状態のうちの1つにある.
ユーザのリストの4つの状態があります.
を積んでいるユーザーは、 を載せました
ユーザーはエラーでロードされましたユーザは、 を設立しませんでした
差別された組合で状態を述べましょう.
あなたのチームはあなたに感謝します.
P . S .私の英語でごめんなさい.英語で私の最初の記事です.
ユーザーのリストを出力するコードを見ましょう.
<ng-container *ngIf="isLoading && !error">Loading...</ng-container>
<ul *ngIf="users && users.length && !error">
<li *ngFor="let user of users">{{user.name}}</li>
</ul>
<ng-container *ngIf="!error && !loading && users && !users.length">Nothing found</ng-container>
<ng-container *ngIf="!isLoading && error">{{error.message}}</ng-container>
このコードはひどい.読み書きが難しい.私は別の方法を好む.私は有限状態機械の理論について読みました.状態機械は有限状態の状態を持ち、各瞬間にこれらの状態のうちの1つにある.
ユーザのリストの4つの状態があります.
を積んでいる
ユーザーはエラーでロードされました
差別された組合で状態を述べましょう.
type State =
| { status: 'loading' }
| { status: 'success', data: IUser[] }
| { status: 'failed', error: Error }
| { status: 'not-founded' }
ビューロジックを書き直しましょう. <ng-container *ngIf="state.status === 'loading'">Loading...</ng-container>
<ul *ngIf="state.status === 'success'">
<li *ngFor="let user of state.data">{{user.name}}</li>
</ul>
<ng-container *ngIf="state.status === 'not-found'">Nothing found</ng-container>
<ng-container *ngIf="state.status === 'failed'">{{state.error.message}}</ng-container>
ジェネリックを使用して状態型を普遍的にすることができます.type State<TSuccessData> =
| { status: 'loading' }
| { status: 'success', data: TSuccessData }
| { status: 'failed', error: Error }
| { status: 'not-founded' }
type UsersListState = State<IUser[]>;
このコードは、より多くの読書と自己ドキュメントです.現在、あなたのIDEはあなたのためにより良いヒントを与えます.あなたのチームはあなたに感謝します.
P . S .私の英語でごめんなさい.英語で私の最初の記事です.
Reference
この問題について(ユーザインタフェースコンポーネントの状態駆動開発), 我々は、より多くの情報をここで見つけました https://dev.to/ifelseapps/state-driven-development-of-user-interface-components-1f0gテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol