react 對輸入做出反應與狀態

React 提供了一種操作 UI 的聲明性方式。您無需直接操作 UI 的各個部分,而是描述組件可能處于的不同狀態,并在它們之間切換以響應用戶輸入。

聲明式 UI 與命令式 UI 的比較

在設計 UI 交互時,可能會考慮 UI 如何響應用戶操作而更改。考慮一個允許用戶提交答案的表單:

  • 當您在表單中鍵入內容時,“提交”按鈕將啟用。
  • 當您按“提交”時,表單和按鈕都會被禁用,并出現一個微調器
  • 如果網絡請求成功,表單將被隱藏,并顯示“謝謝”消息
  • 如果網絡請求失敗,則會顯示一條錯誤消息,并且表單將再次啟用

命令式編程中,上述內容直接對應于如何實現交互。您必須編寫確切的指令來操作 UI,具體取決于剛剛發生的事情。這是另一種思考方式:想象一下,在一輛車里騎在某人旁邊,然后輪流告訴他們去哪里。

他們不知道你想去哪里,他們只是聽從你的命令。(如果你把方向弄錯了,你最終會來錯地方!它之所以被稱為命令式,是因為你必須“命令”每個元素,從微調器到按鈕,告訴計算機如何更新 UI。

在這個命令式 UI 編程的例子中,表單是在沒有 React 的情況下構建的。它只使用瀏覽器 DOM:

async function handleFormSubmit(e) {e.preventDefault();disable(textarea);disable(button);show(loadingMessage);hide(errorMessage);try {await submitForm(textarea.value);show(successMessage);hide(form);} catch (err) {show(errorMessage);errorMessage.textContent = err.message;} finally {hide(loadingMessage);enable(textarea);enable(button);}
}function handleTextareaChange() {if (textarea.value.length === 0) {disable(button);} else {enable(button);}
}function hide(el) {el.style.display = 'none';
}function show(el) {el.style.display = '';
}function enable(el) {el.disabled = false;
}function disable(el) {el.disabled = true;
}function submitForm(answer) {// Pretend it's hitting the network.return new Promise((resolve, reject) => {setTimeout(() => {if (answer.toLowerCase() === 'istanbul') {resolve();} else {reject(new Error('Good guess but a wrong answer. Try again!'));}}, 1500);});
}let form = document.getElementById('form');
let textarea = document.getElementById('textarea');
let button = document.getElementById('button');
let loadingMessage = document.getElementById('loading');
let errorMessage = document.getElementById('error');
let successMessage = document.getElementById('success');
form.onsubmit = handleFormSubmit;
textarea.oninput = handleTextareaChange;
<form id="form"><h2>City quiz</h2><p>What city is located on two continents?</p><textarea id="textarea"></textarea><br /><button id="button" disabled>Submit</button><p id="loading" style="display: none">Loading...</p><p id="error" style="display: none; color: red;"></p>
</form>
<h1 id="success" style="display: none">That's right!</h1><style>
* { box-sizing: border-box; }
body { font-family: sans-serif; margin: 20px; padding: 0; }
</style>

對于孤立的示例來說,操作 UI 已經足夠好了,但在更復雜的系統中,管理起來會成倍增加。想象一下,更新一個充滿不同表單的頁面,就像這個一樣。添加新的 UI 元素或新的交互需要仔細檢查所有現有代碼,以確保沒有引入 bug(例如,忘記顯示或隱藏某些內容)。

React 就是為了解決這個問題而構建的。

在 React 中,你不會直接操作 UI,這意味著你不會直接啟用、禁用、顯示或隱藏組件。取而代之的是,你聲明了你想要顯示的內容,React 會弄清楚如何更新 UI。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/11473.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/11473.shtml
英文地址,請注明出處:http://en.pswp.cn/web/11473.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[C語言]總覽

目錄 1. 框架、默認數據類型 2. 分支結構 &#xff08;1&#xff09;. if ... else ... &#xff08;2&#xff09;. switch ... case ... 3. 循環結構 &#xff08;1&#xff09;. while &#xff08;2&#xff09;. for &#xff08;3&#xff09;. do ... while 4. 函…

區塊鏈的跨鏈交互:從學校間交流看跨鏈技術

區塊鏈是一種去中心化的分布式賬本技術&#xff0c;它通過加密學和共識機制來確保數據的安全性和不可篡改性。每個區塊鏈就像一所獨立的學校&#xff0c;有自己的制度、學生和重點專業。它們各自運行&#xff0c;有時在同一領域展開不同的活動。隨著區塊鏈技術的不斷發展&#…

【組合博弈】Outcome Classes

Outcome Classes 一個游戲 G G G的outcome函數代表這個游戲最終的結果&#xff0c;就是說這個游戲最后的贏家是誰。outcome函數是一個從游戲 G G G映射到四個結果的函數&#xff0c;四個結果分別是 L , R , P , N L, R, P, N L,R,P,N。意義如下表&#xff1a; ClassNameDefin…

學習筆記:Adaptive Platform(AP)適配到RTOS

一、背景 1、AP版本 Adaptive Platform AUTOSAR R20-11版本標準支持C14。CM模塊支持DDS、SOME/IP協議 2、RTOS RTOS-A核&#xff0c;當前完全支持POSIX PSE51、POSIX PSE52接口&#xff0c;POSIX PSE53部分支持&#xff0c;POSIX PSE54基本不支持。詳細接口參考&#xff1a…

第十四天:PHP 開發,輸入輸出類留言板訪問 IPUA 頭來源

1.PHP-全局變量$_SERVER 2.MYSQL-插入語法INSERT 3.輸入輸出-XSS&反射&存儲 4.安全問題-XSS跨站&CSRF等 1.輸入輸出類安全問題 反射性xss 這個先準備一個數據&#xff0c;隨便弄一個表名字&#xff0c;在隨便弄一點數據存入即可 作為連接的數據庫&#xff0c…

排序-歸并排序(merge sort)

歸并排序&#xff08;Merge Sort&#xff09;是一種分而治之的算法&#xff0c;它將原始數組分成越來越小的子數組&#xff0c;直到每個子數組只有一個元素&#xff0c;然后將這些子數組兩兩合并&#xff0c;過程中保持排序狀態&#xff0c;最終合并成一個完全有序的數組。歸并…

《一》Word文字編輯軟件---架構設計分析

1&#xff0c;簡單介紹 今天&#xff0c;我們來模擬offic軟件中的word文檔&#xff0c;運行如圖&#xff1a; 運行程序后會出現主界面&#xff0c;頂端的菜單欄包括“文件”“編輯”“格式”“窗口”和“幫助五個主菜單。 菜單欄下面是工具欄&#xff0c;包含了系統常用的功能按…

如何判斷海外住宅ip的好壞?

在海外IP代理中&#xff0c;住宅IP屬于相對較好的資源&#xff0c;無論是用于工作、學習、還是娛樂&#xff0c;都能得到較好的使用效果。作為用戶&#xff0c;該如何判斷海外住宅IP的好壞呢&#xff1f; 穩定性與可靠性&#xff1a;海外住宅IP相比動態IP地址&#xff0c;通常具…

Java全局異常處理,@ControllerAdvice異常攔截原理解析【簡單易懂】

https://www.bilibili.com/video/BV1sS411c7Mo 文章目錄 一、全局異常處理器的類型1-1、實現方式一1-2、實現方式二 二、全局異常攔截點2-1、入口2-2、全局異常攔截器是如何注入到 DispatcherServlet 的 三、ControllerAdvice 如何解析、執行3-1、解析3-2、執行 四、其它4-1、設…

電腦提示找不到ffmpeg.dll無法繼續執行代碼怎么辦?

電腦提示找不到找不到ffmpeg.dll無法繼續執行代碼怎么辦&#xff0c;有什么好的解決辦法&#xff0c;出現這樣的彈出就會導致軟件無法打開或者是異常關閉&#xff0c;找不到dll文件&#xff0c;是一個非常重要的電腦使用問題&#xff0c;會給使用者帶來許多的麻煩。那么找不到d…

LeetCode746:使用最小花費爬樓梯

題目描述 給你一個整數數組 cost &#xff0c;其中 cost[i] 是從樓梯第 i 個臺階向上爬需要支付的費用。一旦你支付此費用&#xff0c;即可選擇向上爬一個或者兩個臺階。 你可以選擇從下標為 0 或下標為 1 的臺階開始爬樓梯。 請你計算并返回達到樓梯頂部的最低花費。 代碼 …

MongoDB和AI 賦能行業應用:制造業和汽車行業

歡迎閱讀“MongoDB和AI 賦能行業應用”系列的第一篇。 本系列重點介紹AI應用于不同行業的關鍵用例&#xff0c;涵蓋制造業和汽車行業、金融服務、零售、電信和媒體、保險以及醫療保健行業。 隨著人工智能&#xff08;AI&#xff09;在制造業和汽車行業的集成&#xff0c;傳統…

CDN的工作原理及流程

CDN&#xff08;Content Delivery Network&#xff0c;內容分發網絡&#xff09;是一種構建在數據網絡上的分布式內容分發網絡。 CDN利用全局負載均衡技術&#xff0c;將用戶的訪問請求指向離用戶最近且工作正常的流媒體服務器上&#xff0c;由流媒體服務器直接響應用戶的請求…

Tableau學習2.0版——復習

官網下載鏈接&#xff1a;https://www.tableau.com/zh-cn/support/releases 學生賬戶申請鏈接&#xff1a;https://www.tableau.com/zh-cn/academic/students。直接去學信網下載學籍在線驗證作為申請證明。 目錄 1、可視化原理 2、基礎圖表制作 2.1 對比分析&#xff08;比…

@游戲行業er!MongoDB廣州線下沙龍邀您報名!

隨著游戲和應用程序的發展&#xff0c;數據變得越來越重要。在為您的下一個游戲選擇數據庫時&#xff0c;數據庫管理者常常會面對靈活性、可擴展性、可靠性、運營效率等問題或挑戰。 MongoDB在游戲開發領域有著廣泛的應用&#xff0c;靈活數據模型可以存儲和處理各種類型的數據…

JPA ENTITY EXTEND

1. Overview Relational databases don’t have a straightforward way to map class hierarchies onto database tables. To address this, the JPA specification provides several strategies: MappedSuperclass – the parent classes, can’t be entitiesSingle Table …

webpack處理js和css模塊化導入導出示例:

webpack默認并不能處理js模塊化的導入和導出,依賴于ts-loader和babel-loader webpack.config,js module.exports {entry: ./src/index.ts,output: {filename: main.js,},mode: development, // 或者 productionmodule: {rules: [{test: /\.ts/,exclude: /(node_modules)/,use:…

二維平移矩陣 (2D translate matrix)

2D translate matrix 推薦閱讀正文推薦閱讀 矢量旋轉矩陣 正文 之前我們介紹了矢量旋轉矩陣的形式,這里我們來介紹一下平移矩陣的形式。比如,我們我們有一個點,其坐標為 (0,1)。那么我們如何操作才能夠將這個點沿著 x 軸正方向平移 1 個單位長度呢? 這里我們以向右移動…

vj題單 P4552 [Poetize6] IncDec Sequence

思路&#xff1a; 一次操作&#xff1a;選一個區間[l, r]&#xff0c;把這個區間的數都加1或者都減1&#xff0c;可以將求該數列的差分數組b然后來進行該操作 一次操作的兩種種情況&#xff1a;&#xff08;l可以等于r&#xff09; 1.b[l]1 b[r1]-1 2.b[l]-1 b[r1]1 Q1:…

PHP 提取數組中的特定的值

需求&#xff1a; 前端展示&#xff1a; &#xff08;1&#xff09;之前的頁面&#xff1a; &#xff08;2&#xff09;修改后的頁面&#xff1a; 之前接口返回的數據 &#xff1a; 解決辦法&#xff1a;提取tags 中的 ’約 的數組 添加到一個新的數組中去 1&#xff1a;一開…