副作用と環境は分離する
#副作用 #設計原則
from: React docs > Lifecycle of Reactive Effects
副作用のプログラムを実装する際はどこで実行されるかの環境を意識してはならない
副作用のメイン処理をベタ書きしないで関数化すべしということ
↓useEffectの例
bad
code:tsx
function ChatRoom({ roomId }) {
useEffect(() => {
const connection = createConnection(serverUrl, roomId);
connection.connect();
return () => {
connection.disconnect();
};
}, roomId);
// ...
}
good
code:tsx
// どう実行されても冪等にできるように、副作用の関数はコンポーネントと分離して考える
const createConnection = (serverUrl = serverUrl, roomId) => {
const connection = /*~*/
/* connection実行 */
const disconnect = /*~*/
return disconnect
}
function ChatRoom({ roomId }) {
useEffect(()=> createConnection, roomId)
/*~*/
}
関連: useEffectはカスタムフックに隠蔽すべし