关于Compose 代码如何写?,如何用mvi或者mvvp写出 正常的业务代码,避免无效重组

284 阅读1分钟

这是mvi状态

这是viewModel

这是activity

当我按下Button之后,发现state.loading 由false ->ture ,true ->false 也会导致读取state.text的函数重组

我的预期是这样,首先flow->onStart 会导致loading重组,然后 flow->onComplete 会导致loading 重组,在flow->collect 会导致 text重组,可是每次state的变更都会导致所有读取了state值的地方重组,这不是我需要的,于是我代码改成如下

不在将整个uiState 替换 而是只改变某个值,那样是不是就能值重组我 改变了值的属性

结果还是一样,

后来发现,其实我需要实现的是延时重组,也就是说,我在需要的时候在去获取整个值,而不是很早就读取整个值,因为在哪里读取,那个地方就会重组(值改变的情况),所以在以上的基础上,修改如下代码

最后的log如下

最后想说的是,有没有Compose大佬来看一眼,应该是这样写的吗?还是说 有什么其他的方法,欢迎大家留言讨论。