[開発ログ]2番目の機能拡張を再パッケージ
13427 ワード
今日やったこと
言うことは実行する
前回リキッドファンデーションした后に书いた后记を覚えていますか...
見に行く
その際、今後の課題として残された事項がいくつかあり、今日やっと課題としての第一歩として、友達を追加する機能を実現しました.
Fluxとグローバルステータス管理が最高
ステータスはグローバルに管理されるため、各コンポーネントにはステータスの悩みを減らす利点があります.さらにFluxモードを使用してステータス変更を管理することで、コードの簡潔性が大幅に向上します.
まず、既存のUserContext
はクエリー機能のみを必要とするため、独立したReduser管理状態では変更されません.しかし、現在は状態が変化しているので、UserContext
を再構築することで管理してみましょう.// userContext.tsx
const userReducer = (state: friend[], action: userReducerAction): friend[] => {
switch (action.type) {
case 'user/addFriend':
return [...state, action.data];
}
};
まず友達だけが機能を付加しますが、コードは本当に明確です.最後に作成したcustom hookで使用しましょう.// useUserContext.ts
const addNewFriend = (friend: friend) => {
friendsDispatch({ type: 'user/addFriend', data: friend });
};
こんなに簡単に新しい友达を加えることができます.
UIは買いましょう
新しい機能の追加は、新しいページを作成することを意味します.またデザイン、レイアウト、cssを書くなんて、面倒くさい.私は今論理を実現したいのですが、発表したいのではありません.
そこで、これまで注目していたUIライブラリの1つNext UIを今回の機会に適用してみました.Niko先生からのメールで偶然見つけたのは、Alphaバージョンですが、表示されているUIがかなりきれいでした.名前からも次を推測できるjsで有名なVercelで作られたライブラリ.
思ったほど簡単ではありません。
ボタンと入力方式を素早く使いたいだけですが、Next UIが提供するGridシステムは最初は慣れにくいです.<Container/>
に付着したgap
属性付与容器padding
は、<Grid.Container/>
に付着したgap
は、children
間の間隔を設定する値である.また、困惑する<Row/>
、<Col/>
のようなレイアウトシステムもあります...慣れると気持ちがいいですが、まだ難しいです.
カッコよくformを使う
反応器ではフォームの処理方法は無数にある.新しい友達を追加すると、inputごとにonChange
eventをそれぞれ記入するのではなく、非常にモダンな方法で複数のinputを処理する名前とステータス情報が表示されます.<Grid xs={10}>
<Input
labelPlaceholder="Nickname"
name="name"
value={input.name}
size="xlarge"
color={helper.color}
status={helper.color}
helperColor={helper.color}
helperText={helper.helperText}
{...inputAttributes}
/>
</Grid>
<Grid xs={10}>
<Input
labelPlaceholder="Status"
status="default"
name="statusMessage"
value={input.statusMessage}
{...inputAttributes}
size="xlarge"
/>
</Grid>
ご覧のように、onChangeでどのように処理するかについては、2つのinputがあります.const handleInputChange = (e: any) => {
setInput({ ...input, [e.target.name]: e.target.value });
};
これにより、input名に一致する属性に対応する値が含まれていることを確認できます.これを見始めたばかりで斬新だ
友達を追加
最終的に友達はどうやって追加したのでしょうか?// AddFriend.tsx
const handleAddButtonClick = (e: any) => {
addNewFriend({ ...input, id: Date.now() });
alert("친구가 추가되었습니다.");
history.push("/");
};
これで積極的にFluxモードを利用して友達一行を追加して終了~!idはランダム値です.
だから結果物はこつこつと
次の友達追加ボタンを押します.
これでフォームが表示されます
友達の情報を入力します.
空いていたら警告も出ていますが、とにかく友達が加わると、
友達を作るお金が多くなった.
Retrospect
同様に、拡張性を考慮してアプリケーションを作成すると、素晴らしい未来も展開されるようです.
今度、友達を削除して、新しいチャットルーム開設機能を追加してみます.
Reference
この問題について([開発ログ]2番目の機能拡張を再パッケージ), 我々は、より多くの情報をここで見つけました
https://velog.io/@grefer/개발일지-리팩토링-두번째-기능-확장
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
// userContext.tsx
const userReducer = (state: friend[], action: userReducerAction): friend[] => {
switch (action.type) {
case 'user/addFriend':
return [...state, action.data];
}
};
// useUserContext.ts
const addNewFriend = (friend: friend) => {
friendsDispatch({ type: 'user/addFriend', data: friend });
};
<Grid xs={10}>
<Input
labelPlaceholder="Nickname"
name="name"
value={input.name}
size="xlarge"
color={helper.color}
status={helper.color}
helperColor={helper.color}
helperText={helper.helperText}
{...inputAttributes}
/>
</Grid>
<Grid xs={10}>
<Input
labelPlaceholder="Status"
status="default"
name="statusMessage"
value={input.statusMessage}
{...inputAttributes}
size="xlarge"
/>
</Grid>
const handleInputChange = (e: any) => {
setInput({ ...input, [e.target.name]: e.target.value });
};
// AddFriend.tsx
const handleAddButtonClick = (e: any) => {
addNewFriend({ ...input, id: Date.now() });
alert("친구가 추가되었습니다.");
history.push("/");
};
同様に、拡張性を考慮してアプリケーションを作成すると、素晴らしい未来も展開されるようです.
今度、友達を削除して、新しいチャットルーム開設機能を追加してみます.
Reference
この問題について([開発ログ]2番目の機能拡張を再パッケージ), 我々は、より多くの情報をここで見つけました https://velog.io/@grefer/개발일지-리팩토링-두번째-기능-확장テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol