我应该传递视图模型还是状态来组成组件?

问题描述 投票:0回答:1

我有一个填充整个片段的撰写组件。 ViewModel 有一些项目作为要填充在屏幕中的状态。我应该将视图模型还是仅将状态作为参数传递给可组合函数?

android android-jetpack-compose android-viewmodel kotlin-flow
1个回答
0
投票

您应该将状态而不是视图模型传递给可组合项。 将视图模型直接传递给可组合项将:

  • 复杂的独立 UI 测试,因为您需要创建视图模型的实例(如果这样做):

    @可组合 有趣的主屏幕(视图模型:MyViewModel){}

  • 弄乱 Android Studio 上的预览,因为它不知道如何生成视图模型来显示预览。

您应该通过以下状态 导航主机

composable(route = "Home"){
     val viewmodel = hiltViewModel<MainViewModel>()
     val state = viewModel.state
     MainScreen(state = state)
}

或片段

class MainFragment : Fragment() {
    private val viewmodel by viewModels<MainViewModel>()
    override fun onCreateView() {
        setContent {
            MainScreen(viewModel.state)
        }
    }
}

使用类似的可组合项

fun MainScreen(state: ViewState)

然后就可以预览了

@Preview
@Composable
fun MainScreenPreview(){
    MainScreen(ViewState(title = "Page Title"))
}
© www.soinside.com 2019 - 2024. All rights reserved.