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
英文地址,請注明出處:http://en.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;請設計兩…