こちら古い情報が記載されております。
特徴
- deriveStateOf を利用せずにある状態から他の状態を計算する処理をコンポーザブルに直書きしたとする。すると再コンポーズ時にある状態から他の状態を計算する処理が動作するようになる。
- deriveStateOf を利用するとある状態が変化したときにのみ他の状態を計算してくれる。そのため再コンポーズ時にある状態から他の状態を計算する処理が動作しないようになる。
サンプル
以下のようなニュースのリストを表示するデータ構造とコンポーザブル関数を用意する。これらのデータ構造とコンポーザブルを利用して「derivedStateOf を利用する場合」と「利用しない場合」ではどのように動作に差ができるのか検証してみる。

derivedStateOf を利用しない場合
derivedStateOf を利用しない場合の動作を以下の動作をするサンプルを作って確認する。
- 全ニュース・ピン留めしているニュース・ピン留めしていないニュースのリストを表示する
- ニュースの PIN・UNPIN でピン留め・ピン留め解除ができる
- 右下の Change ボタンにてリスト表示のフィルターを変更できる
- 右下の Refresh ボタンにて右上の Unix 時間を更新できる
- リスト表示のフィルター処理は derivedStateOf を利用せずに直書きする
derviedStateOf を利用しない場合は以下のように動作する
- ニュースのフィルタが変更されたときにはフィルタ済みリストが再計算される
- ニュースのピン留め状態が変更されたときにはフィルタ済みリストが再計算される
- Unix 時間が変更されたときにはフィルタ済みリストが再計算される
- というようにニュースのリストに関係のない値が変化した場合にも再計算が動作してしまう

derivedStateOf を利用する場合
derivedStateOf を利用する場合の動作を以下の動作をするサンプルを作って確認する。
- 全ニュース・ピン留めしているニュース・ピン留めしていないニュースのリストを表示する
- ニュースの PIN・UNPIN でピン留め・ピン留め解除ができる
- 右下の Change ボタンにてリスト表示のフィルターを変更できる
- 右下の Refresh ボタンにて右上の Unix 時間を更新できる
- リスト表示のフィルター処理は derivedStateOf を利用して計算する
derivedStateOf を利用する場合は以下のように動作する
- ニュースのフィルタが変更されたときにはフィルタ済みリストが再計算される
- ニュースのピン留め状態が変更されたときにはフィルタ済みリストが再計算される(NewsList 自体は再コンポーズされない)
- Unix 時間が変更されたときにはフィルタ済みリストが再計算されない(NewsList 自体は再コンポーズされる)
- ニュースのリストに関係のない値が変化した場合にはフィルタ済みリストを再計算させないようにする、またニュースのリストの状態更新時にはコンポーザブル自体を再コンポーズさせないようにできる。
- フィルタが変更されたときにコンポーザブル自体が再コンポーズされるのは derivedStateOf を宣言している remember のキーにフィルタが設定されているからです。remember のキーがフィルタが変わったときにはフィルタ済みリストを破棄して再生するため再コンポーズされるようです。

参考文献
Discussion
間違ってたらすみません。
再コンポーズされるかどうかについては、
derivedStateOf
のおかげでなくてremember
が働いてるからだと思います。学習時にまとめたもので、正しく理解できていない箇所もありそうと思いますので、こちら再確認させていただきます。しばらく時間かかってしまうと思うのですが、上記の内容を確認させていただいて、更新したらまたコメントさせていただきます。
こちらメンテナンスが難しいと判断したのでアーカイブしてより、正しい情報が記載されている記事へのリンクを追加しました。(消してしまっても良いかなと思ったのですが、何かのタイミングでこの記事を参考にしてしまった場合に、後から見れなくなると困る方もいそうなので注意事項を記載した上でリンクを残す形にしました。)