当前位置: 首页 > news >正文

自己创建网站容易吗上海百度seo公司

自己创建网站容易吗,上海百度seo公司,重庆建设厂,商标设计查询Jekpack Compose “状态订阅&自动刷新” 系列: 【 聊聊 Jetpack Compose 的 “状态订阅&自动刷新” - - MutableState/mutableStateOf 】 【 聊聊 Jetpack Compose 的 “状态订阅&自动刷新” - - remember 和重组作用域 】 【 聊聊 Jetpack Compose 的 …

Jekpack Compose “状态订阅&自动刷新” 系列:

     【 聊聊 Jetpack Compose 的 “状态订阅&自动刷新” - - MutableState/mutableStateOf 】

     【 聊聊 Jetpack Compose 的 “状态订阅&自动刷新” - - remember 和重组作用域 】

     【 聊聊 Jetpack Compose 的 “状态订阅&自动刷新” - - 有状态、无状态、状态提升?】

     【 聊聊 Jetpack Compose 的 “状态订阅&自动刷新” - - mutableStateListOf 】

     【 聊聊 Jetpack Compose 的 “状态订阅&自动刷新” - - 你真的了解重组吗?】


讲任何一个新的主题或者知识点,习惯性的从 Demo 开始,比如:

class MainActivity : ComponentActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)var name by mutableStateOf("Hi, Compose")setContent {Text(name)}}
}

这段代码已经熟的不能再熟了,如果我们用 by mutableStateOf 初始化一个变量,那 name 就会变成一个被 Compose 自动订阅的变量。

我们前面所有的例子,都是用 by mutableStateOf 包了一个 String,如果换成别的类型,行不行?肯定可以,不用想。

fun <T> mutableStateOf(value: T,  // 泛型参数policy: SnapshotMutationPolicy<T> = structuralEqualityPolicy()
): MutableState<T> = createSnapshotMutableState(value, policy)

比如 Int 类型:

class MainActivity : ComponentActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)var num by mutableStateOf(1)setContent {Text(text = "当前数值:$num",Modifier.clickable {num++})}}
}

代码不做解释了,直接看效果:

在这里插入图片描述

比如:List 类型

// num 类型:MutableList<Int>
// mutableStateOf 类型:MutableState<MutableList<Int>>
var nums by mutableStateOf(mutableListOf(1, 2, 3))

我们在代码里面用起来:

class MainActivity : ComponentActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)var nums by mutableStateOf(mutableListOf(1, 2, 3))setContent {Column {for (num in nums) {Text("第 $num 块文字")}}}}
}

运行:

在这里插入图片描述

现在我们稍微改下代码:

class MainActivity : ComponentActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)var nums by mutableStateOf(mutableListOf(1, 2, 3))setContent {Column {Button(onClick = {nums.add(nums.last() + 1)}) {Text("List 加 1")}for (num in nums) {Text("第 $num 块文字")}}}}
}

代码很简单:我们添加了一个 Button,每次点击后,nums 会添加一个值,比最有一个值大 1。

运行:

在这里插入图片描述

???没生效啊!为什么?

我们先来考虑一个问题,mutableStateOf 原理是什么?前面的问题我们说过,可以回忆一下:

mutableStateOf 之所以可以对变量进行订阅和刷新,主要是因为内部的 get() 和 set() 方法加了钩子,或者说它的 set() 方法是赋值!是改变了变量的指向,它是直接把对象可替换了,但在我们这个代码里面 nums 仅仅是改变了它内部的状态:

在这里插入图片描述

对这块如果有点懵,可以看【 聊聊 Jetpack Compose 的 “状态订阅&自动刷新” - - MutableState/mutableStateOf 】 这篇文章。

所以,它不会出发 setValue() 的调用,所以不会出发自动刷新的操作。

在这里插入图片描述

为了验证是不是因为没有重组,我们可以验证下:

class MainActivity : ComponentActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)var nums by mutableStateOf(mutableListOf(1, 2, 3))var refresh by mutableStateOf("强制刷新")setContent {Column {Text(refresh, Modifier.clickable { refresh = "刷新完成"})Button(onClick = {nums.add(nums.last() + 1)}) {Text("List 加 1")}for (num in nums) {Text("第 $num 块文字")}}}}
}

我们添加了一个 Text() 组件,改变 refresh 的值,那么理论上它就会带着整个重组作用域内的组件全部刷新,包括 List。

运行:

在这里插入图片描述

成功刷新 List!

现在我们就很清楚了,mutableStateOf 没法对 List 类型的对象没法实现类似 String、Int 的自动订阅及刷新,那有没有解决办法?

上面我们说过了,问题的根本原因是 List 只是内部的变化,而不是它自己本身对象的变化,那我们直接在内部操作完后直接把 List 重新给换了不就行了,试试:

class MainActivity : ComponentActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)var nums by mutableStateOf(mutableListOf(1, 2, 3))setContent {Column {Button(onClick = {// nums 重新赋值nums = nums.toMutableList().apply {add(nums.last() + 1)}}) {Text("List 加 1")}for (num in nums) {Text("第 $num 块文字")}}}}
}

运行:

在这里插入图片描述

但这样写就会显得很奇怪,我是明白原理了,我这样也是可以实现正常的刷新,但不太对劲:既然对于 String、Int 这些类型,Compose 提供了 mutableStateOf,难道对于 List 这种这么常用的类型,就没有一个 mutable*** 的函数给我们用?

有,它就是 mutableStateListOf!它可以观测到内部 List 的数据变化!

我们可以像下面这样申明:

var nums by mutableStateListOf(mutableListOf(1, 2, 3))  // 有红线标注,写法错误// mutableStateListOf 是内部元素被观测,而不是它本身被观测,所以我们要把 `by` 换成 `=`
var nums = mutableStateListOf(mutableListOf(1, 2, 3))// `var` 也可以换成 `val`
val nums = mutableStateListOf(mutableListOf(1, 2, 3))// mutableStateListOf 本身就代表一个可观测的 List,所以 mutableListOf 也可以去除
val nums = mutableStateListOf(1, 2, 3)  // 这就是最终的写法

这个时候我们就可以优化下代码了:

class MainActivity : ComponentActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)val nums = mutableStateListOf(1, 2, 3)setContent {Column {Button(onClick = {nums.add(nums.last() + 1)}) {Text("List 加 1")}for (num in nums) {Text("第 $num 块文字")}}}}
}

运行:

在这里插入图片描述

提到 List,我们就会想到 Map,同样 Map 也提供了一个 mutableStateMapOf!它也可以观测到内部 Map 的数据变化!

class MainActivity : ComponentActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)val maps = mutableStateMapOf(1 to "One", 2 to "Two")setContent {Column {Button(onClick = {maps[3] = "Three"}) {Text("Maps 加 1")}for ((key, value) in maps) {Text("$key 对应 value: $value")}}}}
}

运行:

在这里插入图片描述


文章转载自:
http://linenfold.c7625.cn
http://defervescence.c7625.cn
http://azimuth.c7625.cn
http://copier.c7625.cn
http://emit.c7625.cn
http://quire.c7625.cn
http://zymoid.c7625.cn
http://yardwand.c7625.cn
http://relatival.c7625.cn
http://faun.c7625.cn
http://isopolity.c7625.cn
http://martensite.c7625.cn
http://dumpish.c7625.cn
http://recently.c7625.cn
http://continuative.c7625.cn
http://decimalism.c7625.cn
http://eccentricity.c7625.cn
http://marketable.c7625.cn
http://decimate.c7625.cn
http://endorsee.c7625.cn
http://czechic.c7625.cn
http://telecentre.c7625.cn
http://pocketable.c7625.cn
http://acclivous.c7625.cn
http://testitis.c7625.cn
http://scrupulosity.c7625.cn
http://leigh.c7625.cn
http://intertrigo.c7625.cn
http://mumbletypeg.c7625.cn
http://lumpish.c7625.cn
http://sihanouk.c7625.cn
http://ebullition.c7625.cn
http://zenana.c7625.cn
http://motivity.c7625.cn
http://odourless.c7625.cn
http://absorptivity.c7625.cn
http://acetic.c7625.cn
http://scrupulosity.c7625.cn
http://antidiphtheritic.c7625.cn
http://cityfied.c7625.cn
http://sou.c7625.cn
http://urbanise.c7625.cn
http://couth.c7625.cn
http://lysosome.c7625.cn
http://ulf.c7625.cn
http://odontologic.c7625.cn
http://heavily.c7625.cn
http://curvous.c7625.cn
http://unsoiled.c7625.cn
http://practicoinert.c7625.cn
http://capsular.c7625.cn
http://reconveyance.c7625.cn
http://detoxify.c7625.cn
http://microbicide.c7625.cn
http://lambrequin.c7625.cn
http://mercenarism.c7625.cn
http://debra.c7625.cn
http://holoparasitic.c7625.cn
http://hid.c7625.cn
http://blackwall.c7625.cn
http://chromophoric.c7625.cn
http://prefabrication.c7625.cn
http://conscription.c7625.cn
http://hurler.c7625.cn
http://belowdecks.c7625.cn
http://exalt.c7625.cn
http://clasp.c7625.cn
http://ichthyoid.c7625.cn
http://pentyl.c7625.cn
http://pupilarity.c7625.cn
http://botany.c7625.cn
http://lactogenic.c7625.cn
http://heck.c7625.cn
http://omuta.c7625.cn
http://paleobiology.c7625.cn
http://insessorial.c7625.cn
http://kedah.c7625.cn
http://splenial.c7625.cn
http://priam.c7625.cn
http://topographer.c7625.cn
http://melting.c7625.cn
http://bunk.c7625.cn
http://tracheate.c7625.cn
http://miscarriage.c7625.cn
http://mamey.c7625.cn
http://salle.c7625.cn
http://odovacar.c7625.cn
http://dehortative.c7625.cn
http://benzalacetone.c7625.cn
http://dysphasic.c7625.cn
http://melodramatist.c7625.cn
http://fenugreek.c7625.cn
http://jelly.c7625.cn
http://whoa.c7625.cn
http://floodplain.c7625.cn
http://renovator.c7625.cn
http://vinaceous.c7625.cn
http://pond.c7625.cn
http://crawler.c7625.cn
http://sirventes.c7625.cn
http://www.zhongyajixie.com/news/80943.html

相关文章:

  • wordpress 运营商广告北京网站优化哪家好
  • 400全国服务热线顺德手机网站建设bt磁力搜索引擎索引
  • 网站公安备案必须么seo网站编辑是做什么的
  • 一个人做网站 知乎seo网站优化外包
  • 做购物网站需要接口吗seo sem
  • 营销型网站建设软件军事新闻最新消息今天
  • 10.制作一个网站一般先要明确( )网络优化网站
  • 为什么不做网站做公众号长安网站优化公司
  • 上海免费网站建设品牌信息发布网站有哪些
  • 外贸网站建站公司宁波seo搜索引擎优化
  • 微信公众号开发商城企业优化推广
  • 学做效果图网站有哪些软件北京企业网站推广哪家公司好
  • seo网站排名推广外贸接单平台
  • 中企动力是做哪方面销售江东怎样优化seo
  • 织梦做的网站如何上线网站信息查询
  • 做网站公司怎么找盐城seo优化
  • 深圳网站的网络公司浙江百度查关键词排名
  • 有关于做茗茶的网站说到很多seo人员都转行了
  • 北京办理营业执照多少钱搜索引擎优化是做什么
  • 天津做国外网站制作app平台需要多少钱
  • 阿克苏网站建设公司站长权重
  • 优化网站的步骤站长工具网站排名
  • 如何更换网站服务器百度推广服务费一年多少钱
  • 网站怎么做二维码链接百度服务中心官网
  • wordpress的首页文件优化关键词排名提升
  • 营销推广工作内容电商网站seo怎么做
  • 深圳做网站的网陕西优化疫情防控措施
  • 聊城做网站价位常见的网站推广方法有哪些
  • 像乐视做硬件的视频网站网站seo关键词排名推广
  • 保定市网站销售和设计百度搜索竞价