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

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

Сообщение Anonymous »

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

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

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

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

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