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

что-то начальное
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 ответов

9 просмотров

>И в частности надо ли заворачивать 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, пусть там будет любое другое преобразование начального значения - как тогда?

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

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

Почему Telegram пишет, что объект media не найден, хотя на самом деле я его передаю? Делаю на urllib, без зависимостей, так надо. Вызываю метод sendMediaGroup с таким JSON: ...
Alexey S
1
Сonst magicTgHTML = (text, entities) => { let processedText = text; let offsetShift = 0; entities.forEach(entity => { const { offset, length, type, url, ...
Андрей
1
Чет мне ссыкотно опять Rainlab.User в проект ставить. Кто знает, опять наотъебись все сделали или после обнов пользоваться можно?
Black Cat
10
это группа токсиков или тех кто помогает?
Ибрагим
9
Гайз, кто-нибудь пробовал запустить probe-rs под камень, которого нет в probe-rs? Мб есть какой-нибудь пример у кого... Через target-gen попробовал сгенерировать chip-descript...
Максим Смирнов
2
коллеги привет. уже второй день бьемся об заклад с одной ошибкой, может вы сталкивались с таки странным поведением? есть тестовый сервер, на который паблишим релизную версию W...
Magzhan
11
Загрузил на свой сервер, теперь обычные прямые ссылки без query параметров и возможных ограничений, всё равно та же ошибка. Неужели скачивать из VK и перезаливать в TG кажд...
Alexey S
2
В смысле более затратная? Общая стоимость владения лошадью меньше, чем автомобиля. В среднем.
Sergej R
10
Кстати, раз про скачивание файлов разговор зашел) Сделал бота для себя (транскрибирующего и суммаризирующего встречи) но не ожидал что за 2 месяца 10к пользователей набежит😅...
Andrey Obolenskiy
8
Можете помочь с этим, я тут использую Джанго как ОРМ для бота, но бот запускать не хочет, уже всезде перерыл не могу решить, может кто то сталкивался?
Ибрагим
4
Карта сайта