Почему viewModel() следует использовать только в корневом компоненте, а экземпляр никогда не передается?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Почему viewModel() следует использовать только в корневом компоненте, а экземпляр никогда не передается?

Сообщение Anonymous »

В этой документации об использовании ViewModel с Compose указано:

Примечание. Из-за их жизненного цикла и области действия вы должны получать доступ и вызывать экземпляры ViewModel в компонуемых объектах уровня экрана, то есть рядом с корневым компонуемым объектом, вызываемым из действия, фрагмента или места назначения графа навигации. Никогда не следует передавать экземпляры ViewModel другим составным объектам, передавайте в качестве параметров только те данные, которые им нужны, и функции, которые выполняют требуемую логику.

Однако область действия ViewModel ограничена действием или фрагментом, поэтому я ожидаю, что все будет в порядке, если вы вызовете viewModel() в любом месте иерархии, и даже в несколько мест в одной иерархии. Я бы ожидал, что в любом случае будет возвращен один и тот же экземпляр.
  • В чем недостаток вызова viewModel() глубже в иерархии, чем корневой составной элемент экрана?
  • Почему экземпляр ViewModel не должен передаваться вложенному составному объекту?
Очевидным недостатком следования этому совету является то, что вам, возможно, придется выполнять большое количество операций по поднятию состояния, что приводит к созданию Composables со многими параметрами, которые необходимо правильно и вручную подключать, что делает код менее читабельным и поддерживаемым.

Подробнее здесь: https://stackoverflow.com/questions/769 ... tance-neve
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»