LeoAndo / android-jetpack-compose-training

sample for Jetpack Compose
0 stars 0 forks source link

side-effects #69

Open LeoAndo opened 2 years ago

LeoAndo commented 2 years ago

https://developer.android.com/jetpack/compose/side-effects https://developer.android.com/codelabs/jetpack-compose-advanced-state-side-effects?hl=ja#0

LeoAndo commented 2 years ago

スナックバーを表示するなどの 1 回限りのイベントをトリガーする場合や、特定の状態で別の画面に移動する場合などに、副作用(side-effects)が必要になることがあります。

LeoAndo commented 2 years ago

LaunchedEffect

コンポーザブル内から suspend 関数を安全に呼び出すには、LaunchedEffectコンポーザブルを使用します。 LaunchedEffect は、いずれかのキーパラメータが変化すると、再起動されます。(blockの中の処理が走る)

LeoAndo commented 2 years ago

rememberCoroutineScope

コンポーザブルの外部でコルーチンを起動するために、Composition から退場すると自動的にキャンセルされるスコープを設定するには、rememberCoroutineScope を使用します。

LeoAndo commented 2 years ago

rememberUpdatedState

値が変化しても再起動されない作用の値をキャプチャしたい場合に利用する。 具体的にはスプラッシュ画面などに利用される。

refs

https://github.com/LeoAndo/development-conference-memo/issues/396 https://developer.android.com/codelabs/jetpack-compose-advanced-state-side-effects?hl=ja#4 副作用の進行中に onTimeout が変更された場合、作用が終了したときに最後の onTimeout が呼び出されるという保証はありません。最後の onTimeout が呼び出されることを保証するには、rememberUpdatedState API を使用して onTimeout を記憶します。この API は、最新の値をキャプチャして更新します。

LeoAndo commented 2 years ago

DisposableEffect

キーが変化した後またはコンポーザブルが Composition から退場したときにクリーンアップする必要がある副作用については、DisposableEffect を使用します。 イベント登録/解除系はDisposableEffectを使うイメージ??

LeoAndo commented 2 years ago

SideEffect

Compose が管理していないオブジェクトと Compose の状態を共有するには、再コンポジションが成功するたびに呼び出される SideEffect コンポーザブルを使用します。

LeoAndo commented 2 years ago

produceState

produceState は、Composition をスコープとするコルーチンを起動します。これにより、返される State に値をプッシュできます。これを使用して、Compose 外の状態を Compose の状態に変換できます。

LeoAndo commented 1 year ago

derivedstateof

usecase: https://developer.android.com/codelabs/jetpack-compose-advanced-state-side-effects?hl=ja#8 のように、リストをスクロールして最初の要素が画面から消えた後、スクロール中に「最初へ移動」ボタンを常に表示させる

特定の状態が他の状態オブジェクトから計算(導出)される場合は、derivedStateOf を使用します。この関数を使用すると、計算で使用される状態のいずれかが変化したときにのみ計算が行われることが保証されます。

LeoAndo commented 1 year ago

snapshotFlow

Compose の State を Flow に変換するためのもの State オブジェクトをコールド Flow に変換するには、snapshotFlow を使用します。

参考: https://zenn.dev/kaleidot725/articles/2022-02-26-jc-snapshot-flow