Всем здрасьте. Есть несколько альтернатив создания переменной в композабл функции: //

что-то начальное
var someval by remember {mutableStateOf("initial val")}
// альтернативы
val somevalFlow = remember(someval) { flowOf(someval) }
val somevalFlow2 by derivedStateOf { flowOf(someval) }
val somevalFlow3 by remember { derivedStateOf { flowOf(someval) } }
Хотелось бы понять чем они отличаются с точки зрения эффективности/поведения. И в частности надо ли заворачивать derivedStateOf в remember?

7 ответов

27 просмотров

>И в частности надо ли заворачивать derivedStateOf в remember? во всех примерах из документации что я видел он всегда заворачивается в remember кроме случаев когда создание derivedState происходит вне композиции (например во вьюмодели или state классе)

Agry-Gami Автор вопроса
Dmitry Fabrichny
>И в частности надо ли заворачивать derivedStateOf...

Немного в сторону - А в чём смысл создавать derivedStateOf во вьюмодели? Откуда он узнает что стейт от которого он произошёл поменялся - это же, я так понимаю, ответственность композиции (как процесса), т.е. если я его не задействовал нигде внутри композабл функции потом он обновляться и не будет, так? Я тоже могу найти примеры использования всего этого в разных видах :) но это не объясняет почему и как...

Agry Gami
Немного в сторону - А в чём смысл создавать derive...

внутри State/MutableState/etc используется механизм снапшотов который и уведомляет всю систему об изменениях в том числе и derivedState, оно работает без композиции. Там недавно книжка вышла где про это очень детально рассказывается.

Agry-Gami Автор вопроса
Dmitry Fabrichny
внутри State/MutableState/etc используется механиз...

Да эту книжку я видал :) Но это был сторонний вопрос - оно работает без композиции это понятно и хорошо. Но возвращаясь к первому сообщению... Между вторым и третьим вариантами надо предпочитать третий (чтобы на каждый фрейм не создавать экземпляр derived state) а что насчёт первого? Будет его поведение в некотором смысле идентично третьему варианту и если да что всё-таки лучше?

Agry Gami
Да эту книжку я видал :) Но это был сторонний вопр...

мне кажется, flow не нужно заворачивать в derivedStateOf так как это не StateObject (который из композа и от которого наследуются все стейты в композе), следовательно derivedState не будет ничего знать о flow. Не уверен насчёт заворачивания flow в remember, я обычно тупо вызываю LaunchedEffect(key1 = Unit, block = { flow.collect { ... })

Agry-Gami Автор вопроса
Dmitry Fabrichny
мне кажется, flow не нужно заворачивать в derivedS...

Так и знал что flow привлечёт ненужное внимание. :) Вопрос не про flow, пусть там будет любое другое преобразование начального значения - как тогда?

Похожие вопросы

Обсуждают сегодня

Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
5
А в каком формате фреймы? Сам формат сейчас придумываешь, или что-то готовое нужно распарсить?
Okhsunrog
5
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Раз начали говорить про embassy, то присоединюсь со своими парой вопросов. 1) Есть ли сопоставимые аналоги для асинхронного кода в emdebbed? 2) Можно ли внутри задач embassy ...
NI_isx
6
сделал сайт, прикрутил в боте сайт, и виджет логина. как автоматически логинить пользователя в аккаунт(телеграм), при входе с бота?
Александра Чернивецкая
5
Карта сайта