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

compose LazyColumn + items没有自动刷新问题

val dataLists by remember { mutableStateOf(datas) } 数据更改后列表不刷新问题。

val dataLists by remember {  mutableStateOf(datas) } LazyColumn(modifier = Modifier.padding(top = 5.dp)) {items(dataLists) {....}}

可以将mutableStateOf 改为mutableStateListOf解决问题:

val dataLists = remember {mutableStateListOf<Message>()
}
dataLists.addAll(datas)

追溯问题原因:

查询源码可以发现:mutableStateOf()返回的是一个MutableState对象,MutableState中有一个var value: T属性

@StateFactoryMarker
fun <T> mutableStateOf(value: T,policy: SnapshotMutationPolicy<T> = structuralEqualityPolicy()
): MutableState<T> = createSnapshotMutableState(value, policy)@Stable
interface State<out T> {val value: T
}...@Stable
interface MutableState<T> : State<T> {override var value: Toperator fun component1(): Toperator fun component2(): (T) -> Unit
}

查看mutableStateOf源码,可以发现,mutableStateOf()返回的是继承自MutableState的SnapshotMutableState对象,路径mutableStateOf()-> createSnapshotMutableState() -> ParcelableSnapshotMutableState-> SnapshotMutableStateImpl,可以看到有这样一段代码:

internal open class SnapshotMutableStateImpl<T>(value: T,override val policy: SnapshotMutationPolicy<T>
) : StateObjectImpl(), SnapshotMutableState<T> {@Suppress("UNCHECKED_CAST")override var value: Tget() = next.readable(this).valueset(value) = next.withCurrent {if (!policy.equivalent(it.value, value)) {next.overwritable(this, it) { this.value = value }}}private var next: StateStateRecord<T> = StateStateRecord(value)......

SnapshotMutableStateImpl的value属性重写了get()和set()方法

当value被读的时候,不光把值返回,还会记录一下在哪被读的当value被写的时候,不止把这个值给改了,还会去查找在哪里被读过,然后通知这些被读过的地方,通知UI进行刷新

操作String、Int等基础类型的时候,都是通过get、set()来获取、设置数据的,所以这操作会被SnapshotMutableStateImpl记录下来,而List、Map这种集合,我们是通过add、remove来更新数据的,所以不会触发SnapshotMutableStateImpl value属性的set。

结论: 使用mutableStateListOf替代mutableStateOf,mutableStateListOf内部对add、remove方法也进行了重写:

val dataLists = remember {mutableStateListOf<T>()
}
dataLists.addAll(datas)

dataLists数据更改时,UI回自动刷新。

相关文章:

compose LazyColumn + items没有自动刷新问题

val dataLists by remember { mutableStateOf(datas) } 数据更改后列表不刷新问题。 val dataLists by remember { mutableStateOf(datas) } LazyColumn(modifier Modifier.padding(top 5.dp)) {items(dataLists) {....}} 可以将mutableStateOf 改为mutableStateListOf解决…...

Java八大常用排序算法

1冒泡排序 对于冒泡排序相信我们都比较熟悉了&#xff0c;其核心思想就是相邻元素两两比较&#xff0c;把较大的元素放到后面&#xff0c;在一轮比较完成之后&#xff0c;最大的元素就位于最后一个位置了&#xff0c;就好像是气泡&#xff0c;慢慢的浮出了水面一样 Jave 实现 …...

编程笔记 html5cssjs 075 Javascript 常量和变量

编程笔记 html5&css&js 075 Javascript 常量和变量 一、JavaScript 变量二、JavaScript 常量三、示例&#xff1a;小结&#xff1a; 在JavaScript中&#xff0c;变量和常量是用来存储数据的占位符。它们的主要区别在于可变性&#xff1a;变量的值可以改变&#xff0c;而…...

题目 1159: 偶数求和

题目描述: 有一个长度为n(n<100)的数列&#xff0c;该数列定义为从2开始的递增有序偶数&#xff08;公差为2的等差数列&#xff09;&#xff0c;现在要求你按照顺序每m个数求出一个平均值&#xff0c;如果最后不足m个&#xff0c;则以实际数量求平均值。编程输出该平均值序…...

呼吸灯--FPGA

目录 1.breath_led.v 2.tb_breath_led.v 呼吸灯就是从完全熄灭到完全点亮&#xff0c;再从完全点亮到完全熄灭。具体就是通过控制PWM的占空比控制亮灭程度。 绘制PWM波的步骤就是&#xff0c;首先灯是在第一个时钟周期保持高电平熄灭状态&#xff0c;在第二个时钟周期保持1/1…...

MySQL数据库①_MySQL入门(概念+使用)

目录 1. 数据库的概念 1.1 数据库的存储介质 1.2 主流数据库 2. MySQL的基本使用 2.1 链接数据库 2.2 服务器管理 2.3 数据库&#xff0c;服务器和表关系 2.4 简单MySQL语句 3. MySQL架构 4. SQL分类 5. 存储引擎 本篇完。 1. 数据库的概念 数据库是按照数据结构来…...

虚幻UE 特效-Niagara特效实战-魔法阵

回顾Niagara特效基础知识&#xff1a;虚幻UE 特效-Niagara特效初识 其他四篇实战&#xff1a;UE 特效-Niagara特效实战-烟雾、喷泉、 虚幻UE 特效-Niagara特效实战-火焰、烛火、 虚幻UE 特效-Niagara特效实战-雨天、 虚幻UE 特效-Niagara特效实战-眩晕。 本篇笔记记录了使用空模…...

Qt多语言翻译

Qt多语言翻译概述 Qt提供了非常简单易用的多语言翻译机制&#xff0c;其核心类为QTranslator.概括来说就是利用Qt的lupdate工具将项目中所有tr函数包裹的字符串提取到.ts文件中&#xff0c;然后使用Qt Linguist由专门的翻译人员对提取的.ts文件进行逐个单词短语的翻译工作. 翻译…...

Latex学习记录

目录 1.Latex各种箭头符号总结 2.[Latex]公式编辑&#xff0c;编号、对齐 3.Latex公式编号: 多行公式多编号&#xff0c;多行公式单编号 4.LaTex中输入空格以及换行 1.Latex各种箭头符号总结 箭头符号 - ➚ (piliapp.com)https://cn.piliapp.com/symbol/arrow/Latex各种箭头…...

你在做绩效考核,还是绩效管理?二者有什么区别

绩效考核&#xff0c;为什么99%都失败&#xff0c;最后一地鸡毛&#xff1f;败在指标&#xff01; 绩效管理&#xff0c;为什么大多数企业都能成功&#xff0c;而且越做越好&#xff1f;成在目标&#xff01; 丢掉层层指标&#xff0c;人人制定目标&#xff0c;这是企业重新定…...

ele-h5项目使用vue3+vite+vant4开发:第四节、业务组件-SearchView组件开发

需求分析 展示切换动画搜索框输入文字&#xff0c;自动发送请求搜索结果展示搜索状态维护历史搜索展示&#xff0c;点击历史搜索后发送请求历史搜索更多切换动画效果 <script setup lang"ts"> import OpSearch from /components/OpSearch.vue import { ref } f…...

C系列-柔性数组

&#x1f308;个人主页: 会编程的果子君 ​&#x1f4ab;个人格言:“成为自己未来的主人~” 目录 ​编辑 柔性数组 柔性数组的特点 柔性数组的使用 柔性数组的优势 柔性数组 也许你从来没有听说过柔性数组这个概念&#xff0c;但是它确实是存在的&#xff0c;C99中&#…...

【Linux网络编程一】网络基础1(网络框架)

【Linux网络编程一】网络基础1&#xff08;网络框架&#xff09; 一.什么是协议1.通信问题2.协议本质3.网络协议标准 二.协议分层1.为什么协议要分层2.如何具体的分层 三.操作系统OS与网络协议栈的关系1.核心点&#xff1a;网络通信贯穿协议栈 四.局域网中通信的基本原理1.封装…...

springboot156基于SpringBoot+Vue的常规应急物资管理系统

基于SpringBootVue的常规应急物资管理系统的设计与实现 摘 要 1 ABSTRACT 2 第一章 绪论 3 1.1研究背景 3 1.2研究意义 3 1.3国内外研究现状 4 1.3.1国外研究现状 4 1.3.2国内研究现状 4 1.4研究内容与方法 5 1.4.1研究内容 5 1.4.2研究方法 5 1.5论文的组织结构 5…...

学习MySQL的MyISAM存储引擎

学习MySQL的MyISAM存储引擎 MySQL的MyISAM存储引擎是MySQL早期版本中默认的存储引擎&#xff0c;后来被InnoDB所取代。尽管InnoDB在许多方面提供了更高级的特性&#xff0c;如事务处理、行级锁定和外键支持&#xff0c;MyISAM仍然因其简单性、高性能以及对全文搜索的支持而被广…...

nginx 的 ngx_http_upstream_dynamic_module 动态域名解析功能的使用和源码详解

tengine ngx_http_upstream_dynamic_module 动态域名解析功能的代码详细解析 1. 为什么需要域名动态解析2. 配置指令3. 加载模块3. 源码分析3.1 指令解析3.2 upstream负载均衡算法的初始化3.3 upstream负载均衡上下文的初始化3.4 获取upstream的服务器地址3.5 域名解析回调处理…...

前端vue/react项目压缩图片工具@yireen/squoosh-browser

想要在前端项目中压缩图片&#xff0c;然后再上传到后端保存&#xff0c;就需要一个压缩工具的帮助&#xff0c;暂时有两个依赖库可以选择&#xff1a;image-conversion和yireen/squoosh-browser&#xff0c;看了官方仓库地址和更新时间等详情&#xff0c;发现还是yireen/squoo…...

悬而未决:daterangepicker设置默认选择日期时间后点确认无值的BUG

daterangepicker有两个BUG&#xff1a; 1、startDate和endDate对设置默认日期没有问题&#xff0c;但对设置默认时间的支持有BUG&#xff01;比如设为 moment().add( 1, day ).hours(8).minutes(20).seconds(0), //如果现在是9点&#xff0c;则设置的时间8&#xff1a;20因为比…...

composer常用命令

查看全局配置信息 composer config -gl 设置镜全局像地址 composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ 去掉-g&#xff0c;即表示只有当前项目使用该镜像 批量安装composer项目依赖 composer install 执行该命令后&#xff0c;会读取当…...

2024年1月27日~2月2日周报

一、前言 上周主要完成了SeisInvNet加强版论文的阅读&#xff0c;并尝试跑了一下代码。 本周阅读师兄的论文《DD-Net》&#xff0c;并尝试思考新的点子修改网络架构。 二、DD-Net阅读情况 标题&#xff1a;Dual decoder network with curriculumlearning for full waveform in…...

Cursor Pro功能优化工具:提升AI编程体验的开源解决方案

Cursor Pro功能优化工具&#xff1a;提升AI编程体验的开源解决方案 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reached your tr…...

业务流程及业务流程优化

业务流程业务流程是指为了实现特定业务目标&#xff0c;将一系列相互关联的活动、任务按照一定的顺序和规则进行组织和执行的过程。它涵盖了从业务起始到结束的整个过程&#xff0c;涉及到人员、设备、信息等多种资源的协调与运用。以下是对业务流程的详细阐述&#xff1a;构成…...

微软VibeVoice-TTS真实案例:用AI生成多人访谈节目音频

微软VibeVoice-TTS真实案例&#xff1a;用AI生成多人访谈节目音频 1. 从零开始认识VibeVoice-TTS 你是否曾经想过&#xff0c;用AI来制作一档完整的访谈节目&#xff1f;不是简单的单人口播&#xff0c;而是包含主持人、嘉宾互动、自然对话转折的专业级音频内容。微软开源的V…...

OpenClaw语音交互方案:Qwen3.5-9B对接Whisper实现语音指令控制

OpenClaw语音交互方案&#xff1a;Qwen3.5-9B对接Whisper实现语音指令控制 1. 为什么需要语音交互能力&#xff1f; 上周我在整理电脑文件时突然想到&#xff1a;既然OpenClaw能模拟人类操作电脑&#xff0c;为什么不给它加上耳朵呢&#xff1f;这个想法源于我经常双手沾满咖…...

如何判断seo 报价是否合适

如何判断SEO报价是否合适 在当前数字化营销的环境中&#xff0c;SEO&#xff08;搜索引擎优化&#xff09;已经成为企业提升在线可见性和吸引潜在客户的关键策略。SEO服务的报价各异&#xff0c;不少企业在选择服务时往往会纠结于如何判断一个SEO报价是否合适。本文将从多个角…...

CLI 的复兴与应用

CLI 的爆发与定义CLI&#xff08;Command Line Interface&#xff0c;命令行界面&#xff09;作为计算机领域古老的交互方式&#xff0c;近期迎来新爆发。飞书、钉钉、谷歌、Stripe 等公司在两周内陆续开源 CLI 产品&#xff0c;越来越多软件转向 CLI 化。CLI 与 GUI 的区别GUI…...

Linux 软件安装没你想的那么简单:为什么有的软件能直接跑,有的非装不可?

Linux 软件安装没你想的那么简单&#xff1a;为什么有的软件能直接跑&#xff0c;有的非装不可&#xff1f; 很多人刚接触 Linux 的时候&#xff0c;对“安装软件”这件事有点迷。 在 Windows 上&#xff0c;大家已经习惯了&#xff1a; 双击一个 exe一路“下一步”软件出现在桌…...

DeOldify多用户并发测试:100+请求下服务稳定性与响应延迟实测

DeOldify多用户并发测试&#xff1a;100请求下服务稳定性与响应延迟实测 1. 引言&#xff1a;当AI上色服务遇到真实流量考验 想象一下&#xff0c;你搭建了一个很酷的AI图片上色服务&#xff0c;平时自己用着挺顺&#xff0c;处理一张老照片也就几秒钟。但突然有一天&#xf…...

5个PathPicker高级技巧:掌握$F令牌与自定义命令的终极指南

5个PathPicker高级技巧&#xff1a;掌握$F令牌与自定义命令的终极指南 【免费下载链接】PathPicker PathPicker accepts a wide range of input -- output from git commands, grep results, searches -- pretty much anything. After parsing the input, PathPicker presents …...

Qwen-Image-Lightning部署教程:国产昇腾/海光平台适配可行性初探

Qwen-Image-Lightning部署教程&#xff1a;国产昇腾/海光平台适配可行性初探 1. 项目概述 Qwen-Image-Lightning是一个基于Qwen/Qwen-Image-2512旗舰模型构建的文生图应用&#xff0c;集成了最新的Lightning LoRA加速技术。这个方案最大的特点是实现了极速生成和高稳定性&…...