solidjs 处理复杂类型的响应式

solidjs 处理复杂类型的响应式

在 solidjs 里响应式一般直接用 createSignal 就可以,但 createSignal 一般用于基础数据类型。

虽然复杂类型也是可以使用,但基于起细粒度响应性的特性。
一般复杂的数据使用 createSignal 就不是那么友好了。

所以 createStore 就来了。

例子如下:用 createSignal 的话就要设置整个 formData 以覆盖原值。

const [formData, setFormData] = createSignal<formData>({columnID: "0",pageSize: 20,keyword: "",
});// 修改keyword的值
setFormData({...keyword: "xxx",
})//或者
setFormData(prev => ({ ...prev, keyword: "xxx" }));

明显的当 createSignal 用于对象时,每次更新都需要创建新对象。

使用 createStore 代替。

const [formData, setFormData] = createStore<formData>({columnID: "0",pageSize: 20,keyword: "",
});setFormData("keyword", newValue);

那么增加更复杂的对象

const [formData, setFormData] = createStore<formData>({columnID: "0",pageSize: 20,keyword: "",details:{address:""}
});// 修改address,使用路径setFormData("details","address", addressValue);

是不是一下在就清晰明了。接下来就是实战了。

我有一个表单,formData 类型还是上面的,。


// 可以直接设置
<inputtype="text"value={formData.details.address}onInput={(e)=> setFormData("details","address",e.target.value);}
/>

添加自定义方法基础款

const updateField = (path: any) => (e: any) => {setFormData(path, e.target.value);
};<inputtype="text"value={formData.keyword}onInput={updateField("keyword")}
/>

添加自定义方法进阶款,适用有套嵌

const updateField = (path: any) => (e: any) => {setFormData(...path, e.target.value);
};<inputtype="text"value={formData.details.address}onInput={updateField(["details","address"])}
/>
<inputtype="text"value={formData.keyword}onInput={updateField(["keyword"])}
/>

若数组(严格来说这里是元组)不好看。改用 string 也是可以的。

const updateField = (path: string) => (e: any) => {const keys = field.split(".");setFormData(...keys, e.target.value);
};<inputtype="text"value={formData.details.address}onInput={updateField("details.address")}
/>
// 是不是一下子就美观多了。

若在 TS 项目中使用会报错…keys 这里会报扩展参数必须元组类型或这传递参数 rest,比较蛋疼不影响使用。但也是可以解决的,虽然是取巧,但 anyScript 嘛

const updateField = (field: string) => (e: Event) => {const keys = field.split(".");(setFormData as any)(...keys, (e.target as HTMLInputElement).value);
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/913101.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/913101.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

爬虫技术-获取浏览器身份认证信息(如 Cookie、Token、Session 等)

方法一&#xff1a;通过浏览器开发者工具查看和提取 Cookie / Token &#x1f4cc; 示例场景&#xff1a; 你在使用一个网站时已经登录了&#xff0c;想看看这个网站是如何保存你的身份凭证的。 &#x1f527; 操作过程&#xff1a; 打开浏览器&#xff08;例如 Chrome&#xf…

[密码学实战]GMT 0136-2024《密码应用HTTP接口规范》解析

[密码学实战]GM/T 0136-2024《密码应用HTTP接口规范》解析国家密码管理局于2025年7月1日正式实施GM/T 0136-2024标准&#xff0c;该规范首次统一了密码服务的HTTP接口设计&#xff0c;为国产密码技术的规模化应用铺平道路。本文结合标准原文&#xff0c;深入剖析其技术细节并给…

Docker 国内镜像列表(免费长期)

Docker 可用镜像源列表&#xff08;7月1日更新-长期维护&#xff09;_dockerhub国内镜像源列表-CSDN博客

BlenderFBXExporter 导出fbx被修改问题

1&#xff09; 解决增加A节点的问题 https://github.com/A-Ribeiro/CustomBlenderFBXExporter 2&#xff09;找出blendshape 不一致&#xff0c;生成blendshape key name映射map 文件compare.txt C:\Users\49938\Documents\DazToUnreal\zhang01\UpdatedFBX\zhang01_fix7.fbx…

AI时代下的IT服务管理转型:趋势、挑战与破局之道

近年来&#xff0c;人工智能&#xff08;AI&#xff09;与自动化技术的迅猛发展&#xff0c;正以前所未有的速度重塑企业运营的各个层面。特别是在IT服务管理&#xff08;ITSM&#xff09;领域&#xff0c;AI的介入不仅提高了问题响应效率&#xff0c;也推动了组织从“被动响应…

三体融合实战:Django+讯飞星火+Colossal-AI的企业级AI系统架构

目录 技术栈关键词&#xff1a;Django 5.0 讯飞星火4.0Ultra Colossal-AI 1.2 WebSocket 联邦学习 ⚡ 核心架构设计 &#x1f6e0;️ 一、Django深度集成讯飞星火API&#xff08;免费版&#xff09; 1. 获取API凭证 2. 流式通信改造&#xff08;解决高并发阻塞&#xff09…

多模态数据融合预警:从IoT传感器到卫星监测的可视化方案升级

你有没有想过&#xff0c;为什么有些城市在暴雨来临时能提前数小时发布内涝预警&#xff0c;而有些地方却只能“等水来了才反应”&#xff1f; 背后的关键&#xff0c;就是多模态数据融合预警系统——它把来自IoT传感器、无人机、地面雷达、气象站、甚至卫星的数据整合在一起&a…

面试八股---css

2、css 2.1 说说你对盒子模型的理解 是什么 当对一个文档进行布局&#xff08;layout&#xff09;的时候&#xff0c;浏览器的渲染引擎会根据标准之一的 CSS 基础框盒模型&#xff08;CSS basic box model&#xff09;&#xff0c;将所有元素表示为一个个矩形的盒子&#xf…

day52-硬件学习之RTC及ADC

一、RTCRTC&#xff08;实时时钟&#xff09;&#xff1a;非易失性在IMX6ULL内部SNVS&#xff08;安全的非易失性存储器&#xff09;提供RTC功能&#xff1b;原理图&#xff1a;二、ADC 2.1 基本概念ADC(模拟数字转换器)&#xff1a;用于将连续变化的模拟信号转换为离散的数字信…

Web 项目如何自动化测试?

Web 项目的自动化测试可以通过 UI自动化 和 接口自动化 结合实现&#xff0c;提高测试效率和覆盖率。以下是关键方法和工具&#xff1a; 【自动化测试】从基础到实战基于Pytest自动化/python自动化的详细教程&#xff01;1. UI自动化测试&#xff08;前端交互&#xff09; 适用…

Java连接阿里云MaxCompute例

要使用Java连接阿里云MaxCompute&#xff08;原名ODPS&#xff09;数据库&#xff0c;您可以遵循以下步骤进行配置和编程&#xff1a; 1. 添加依赖 确保您的项目中包含了MaxCompute JDBC驱动的依赖。如果您使用Maven&#xff0c;可以在pom.xml中添加如下依赖&#xff1a; &l…

【网络与系统安全】强制访问控制——BLP模型

一、模型背景与定义 BLP&#xff08;Bell-LaPadula&#xff09;模型是由David Bell和Len Adula在1973年提出的强制访问控制&#xff08;MAC&#xff09;模型&#xff0c;是最早的计算机安全模型之一&#xff0c;主要用于解决多用户系统中的信息机密性保护问题&#xff0c;尤其…

HTTPS详解:原理 + 加解密过程 + 面试问答

一、HTTP 与 HTTPS 的区别 项目HTTPHTTPS全称HyperText Transfer ProtocolHyperText Transfer Protocol Secure端口80443协议层应用层应用层 TLS&#xff08;安全层&#xff09;加密方式明文传输加密传输&#xff08;TLS&#xff09;安全性易被劫持、中间人攻击可加密、防篡改…

Python-GUI-wxPython-控件

1 需求 2 接口 3.* 控件&#xff1a;wx.StaticText import wxclass MainFrame(wx.Frame):def __init__(self, *args, **kwargs):super(MainFrame, self).__init__(*args, **kwargs)self.init_ui()self.Center()self.Maximize()def init_ui(self):static_text wx.StaticText(pa…

3-1 PID算法改进(积分部分)

目录 1、积分限幅 2、积分分离 3、变速积分 在位置式PID的基础上进行改进 定速用PI控制&#xff0c;定位置用PD控制 1、积分限幅 在定速控制上体现 第一种方法确定上下限方法&#xff1a;Out最大时&#xff0c;除以Ki&#xff0c;得到一个值&#xff0c;上限不能超过这个…

Linux探秘坊-------13.进程间通信

1.进程间通信⽬的 2.管道 2.1 匿名管道 -----通常用来实现 父子通信 创建子进程时&#xff0c;需要把父进程的进程内容全部拷贝一份&#xff0c;但文件管理是不需要拷贝的 但是我们把父进程的文件描述符表给拷贝下来了&#xff0c;文件描述符表里是一堆指针&#xff0c;他们仍…

深入理解Vapnik-Chervonenkis(VC)维度:机器学习泛化能力的理论基础

引言 通过本篇阅读,从理论上去理解为什么: 要选择复杂度低的模型 过拟合的时候,增加样本量有用 以及如何根据样本量选择特征个数 PAC机器学习框架, VC 维是机器学习最重要的基础理论之一 在机器学习领域&#xff0c;模型泛化能力是衡量算法性能的核心指标…

redis持久化-纯缓存模式

redis持久化-纯缓存模式 文档 redis单机安装redis常用的五种数据类型redis数据类型-位图bitmapredis数据类型-基数统计HyperLogLogredis数据类型-地理空间GEOredis数据类型-流Streamredis数据类型-位域bitfieldredis持久化-RDBredis持久化-AOFredis持久化-RDBAOF混合模式 官…

HTML DOM 访问

HTML DOM 访问 引言 HTML DOM&#xff08;文档对象模型&#xff09;是现代Web开发中不可或缺的一部分。它允许开发者通过JavaScript操作HTML文档中的元素&#xff0c;从而实现丰富的交互效果。本文将详细介绍HTML DOM的访问方法&#xff0c;包括如何获取元素、如何修改元素属…

双系统如何做接口认证-V1

现有A系统&#xff0c;B系统&#xff0c;A系统启动的时候调用B系统的注册接口API1&#xff08;把A系统配置信息注册到B系统&#xff09;&#xff0c;A系统定时向B系统接口AP2发送心跳信息&#xff0c;B系统根据业务情况&#xff0c;调用A系统的业务接口AP3&#xff0c;请设计两…