」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 反應新的更新

反應新的更新

發佈於2024-07-31
瀏覽:306

React  The new updates

本周,我们将讨论新的 React 19 更新和挂钩。在经历并使用了其中一些新更新后,我只能同意它简化了开发人员在构建应用程序(尤其是与交互式表单相关的应用程序)时所经历的一些严格活动。

加入我,让我们探索其中的一些新更新。

React 编译器React 编译器选择您的 React 代码,将其转换为浏览器的 JavaScript 代码,并管理组件或用户界面的状态。这种单一的操作有助于优化应用程序的性能。

如果您熟悉 useMemo 钩子、useCallback 钩子和 React.Memo,您就会明白它们有助于记忆(存储值或函数以供将来使用)您的组件,因此它们不必重新编写当没有状态改变时渲染。当状态发生变化时,React 会重新渲染相关组件及其子组件,而当代码没有变化时,组件将保持原样,保留组件或钩子中的先前内存、值和状态以供将来使用用途;从而优化组件的性能。这正是 React 编译器自动执行的操作,无需手动调用任何上述钩子。

Form Actions:使用React的最大优势之一是状态的管理和突变,这主要发生在我们使用 元素。表单帮助我们更有效地创建和处理用户交互。

使用表单操作,您不需要像 onSubmit 和 onChange 这样的事件处理程序来实现数据的实时突变,相反,我们可以传递 action 属性到接收触发事件的函数的

元素。
const myFunction = async (formData) => {
  const [name, setName] = useState("")

  const updatedName = await nameChange(formData.get("name"))
     setName(updatedName)
}

通过这种方法,我们不需要应用useState通过event.target.value来改变数据,相反,在myFunction中我们可以通过参数获取变异数据。

这意味着我们必须从表单中的 元素设置一个 name 属性。使用此方法意味着我们允许 React 通过 Native React 表单对象 处理表单本身,而不是通过事件处理程序手动更改状态。

服务器组件:React 19 允许在捆绑之前在服务器上渲染组件,在与客户端应用程序或 SSR 服务器设置不同的环境中。 Server 组件与 SSR(服务器端渲染)不同,而是 React Server Components 中的一个独立的服务器环境。
此功能允许组件提前预渲染,从而实现快速内容显示并缩短加载时间。

元数据:React 19 允许灵活的元数据。开发者可以通过DocumentHead组件管理各个组件的titledescription以及其他meta标签。这将有助于改善 SEO(搜索引擎优化)。

Const AboutUs = () => {
 return (
    
      Learn more about our company
      
      // content
    >
  );
}

React 19 有一系列 钩子,一些是新的,另一些是对现有钩子的改进。下面我们就来讨论一下。

use() 钩子:use 钩子是一个实验性 API,可以直接用于读取组件或钩子中 Promise 或上下文的值(这是目前唯一已知的限制) )。
use hook 非常通用,也可以用来代替 useEffect,因为它可以用于异步数据获取。这有助于
实现更整洁、简洁的代码块。

警告它不是 useEffect 的替代品,因为它仍然有其自身的限制,_useEffect _将无限制地执行。

import {use} from "react"
const fetchData = async () => {
    const response = await fetch("https://........");
    return response.json()
}

const userData = () => {
    const user = use(fetchData());

        return (
    
{user.name}
); }

useActionState():这是一个新的钩子,有助于管理状态更改。它有助于管理挂起状态、错误处理和最终
状态更新。 useActionState _的工作方式与 _useReduce _in 类似,它接收两个 (2) 个参数:提交表单时要调用的函数和一个 _initialState,并且它返回一个包含三个 (3) 个值的数组: state,如果状态发生突变,则为当前状态,一个新的操作(formAction)可以作为表单组件中的道具传递以调用服务器操作,并且 _isPending _that 返回一个 _boolean _value 如果表格已提交。

import { useActionState } from "react";

async function incrementFunction(initialState, formData) {
  return initialState   1;
}

function StatefulForm({}) {
  const [state, formAction, isPending] = useActionState(incrementFunction, 0);

  console.log(state);

  return (
    
) }

在此示例中,每次单击按钮时,incrementFunction都会将1添加到stateinitialState 为 0,然后在第一次单击按钮时增加到 1,从而将 state 更改为 1,并且每次单击按钮都会为最后一次单击添加 1组件的状态。

useOptimistic() 钩子:

这是一个新的挂钩,允许用户甚至在页面完全加载之前就可以看到其操作的结果。即使服务器仍处于数据获取模式,页面也会乐观地呈现给用户。

React希望数据获取成功,向客户端显示预期的结果,当数据获取失败时,React恢复到之前状态的值以免显示错误的数据。这种独特的操作有助于无缝、快速地显示数据,从而改善用户体验。

useFormStatus():

顾名思义,useFormStatus为我们提供了表单表单字段的状态。这个钩子不接受任何参数,但它肯定返回 4 个对象:

待定:这将返回一个布尔值值:truefalse。提交表单时返回 true,提交表单时返回 false

data:当表单提交成功后,我们可以从表单字段中获取用户或对象的信息,如下所示:

(formData.get("name"))
(formData.get("address"))

method:除非另有说明,表单的默认方法是GET。我们可以使用 .method 获取表单的方法。当我们提交表单时,应将字符串方法属性指定为 POST

action:这是对将传递给 元素中的 action 属性的函数的引用。

useFormStatus 必须始终从 元素或在 内呈现的组件调用。

还有很多更新我无法真正写下来,所以你不会因为阅读这么多而感到无聊。您可以单击 React Docs 网站来查看其他一些更新。

我希望您和我一起学习愉快。

如果您喜欢我的文章,请关注我。

谢谢,祝朋友们度过愉快的一周。

版本聲明 本文轉載於:https://dev.to/oluwatrillions/react-19-the-new-updates-2k68?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 為什麼我會收到MySQL錯誤#1089:錯誤的前綴密鑰?
    為什麼我會收到MySQL錯誤#1089:錯誤的前綴密鑰?
    mySQL錯誤#1089:錯誤的前綴鍵錯誤descript 理解prefix keys primary鍵(movie_id(3))primary鍵(Movie_id) primary鍵(Movie_id) primary鍵(Movie_id) > `這將在整個Movie_ID列上建立標...
    程式設計 發佈於2025-02-06
  • 我可以將加密從McRypt遷移到OpenSSL,並使用OpenSSL遷移MCRYPT加密數據?
    我可以將加密從McRypt遷移到OpenSSL,並使用OpenSSL遷移MCRYPT加密數據?
    將我的加密庫從mcrypt升級到openssl 問題:是否可以將我的加密庫從McRypt升級到OpenSSL?如果是這樣?使用openssl? 答案:可以使用mcrypt數據加密數據,可以使用openssl。關於如何使用openssl對McRypt進行加密的數據: openssl_decryp...
    程式設計 發佈於2025-02-06
  • 如何干淨地刪除匿名JavaScript事件處理程序?
    如何干淨地刪除匿名JavaScript事件處理程序?
    在這里工作/},false); 不幸的是,答案是否。除非在Creation中存儲對處理程序的引用。 要解決此問題,請考慮將事件處理程序存儲在中心位置,例如頁面的主要對象,請考慮將事件處理程序存儲在中心位置,否則無法清理匿名事件處理程序。 。這允許在需要時輕鬆迭代和清潔處理程序。
    程式設計 發佈於2025-02-06
  • 在仍在記錄時,如何在PHP 5中抑制嚴格的標準錯誤?
    在仍在記錄時,如何在PHP 5中抑制嚴格的標準錯誤?
    在PHP 5 //抑制錯誤顯示顯示 ini_set('display_errors','0'); //報告所有錯誤(包括嚴格的標準),但不顯示它們 error_reporting(e_all | e_strict); 這些設置將防止向用戶顯示錯誤消息,同時仍允許它...
    程式設計 發佈於2025-02-06
  • 如何在Java字符串中有效替換多個子字符串?
    如何在Java字符串中有效替換多個子字符串?
    利用正則表達式示例示例usage 接下來,您可以使用匹配器查找令牌的所有出現,並用相應的值替換它們: 一旦匯總正則表達式,搜索輸入字符串通常非常快, 。此外,正則表達式還可以靈活地處理複雜的搜索模式,例如涉及括號和量詞的模式。
    程式設計 發佈於2025-02-06
  • 為什麼使用固定定位時,為什麼具有100%網格板柱的網格超越身體?
    為什麼使用固定定位時,為什麼具有100%網格板柱的網格超越身體?
    網格超過身體,用100%grid-template-columns 問題:考慮以下CSS和HTML: position:fixed ; grid-template-columns:40%60%; grid-gap:5px; 背景: #eee; 當位置未固定時,網格將正確顯示。但是...
    程式設計 發佈於2025-02-06
  • 如何在JavaScript對像中動態設置鍵?
    如何在JavaScript對像中動態設置鍵?
    如何為JavaScript對像變量創建動態鍵,嘗試為JavaScript對象創建動態鍵,使用此Syntax jsObj['key' i] = 'example' 1;將不起作用。正確的方法採用方括號:他們維持一個長度屬性,該屬性反映了數字屬性(索引)和一個數字屬性的數量。標準對像沒有模仿這...
    程式設計 發佈於2025-02-06
  • 如何從Google API中檢索最新的jQuery庫?
    如何從Google API中檢索最新的jQuery庫?
    從Google APIS 問題中提供的jQuery URL是版本1.2.6。對於檢索最新版本,以前有一種使用特定版本號的替代方法,它是使用以下語法: https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js(google hosted...
    程式設計 發佈於2025-02-06
  • 如何使用Python的記錄模塊實現自定義處理?
    如何使用Python的記錄模塊實現自定義處理?
    使用Python的Loggging Module 確保正確處理和登錄對於疑慮和維護的穩定性至關重要Python應用程序。儘管手動捕獲和記錄異常是一種可行的方法,但它可能乏味且容易出錯。 解決此問題,Python允許您覆蓋默認的異常處理機制,並將其重定向為登錄模塊。這提供了一種方便而係統的方法來捕獲...
    程式設計 發佈於2025-02-06
  • PHP陣列鍵值異常:了解07和08的好奇情況
    PHP陣列鍵值異常:了解07和08的好奇情況
    PHP數組鍵值問題,使用07&08 在給定數月的數組中,鍵值07和08呈現令人困惑的行為時,就會出現一個不尋常的問題。運行print_r($月份)返回意外結果:鍵“ 07”丟失,而鍵“ 08”分配給了9月的值。 此問題源於PHP對領先零的解釋。當一個數字帶有0(例如07或08)的前綴時,PHP...
    程式設計 發佈於2025-02-06
  • 如何使用組在MySQL中旋轉數據?
    如何使用組在MySQL中旋轉數據?
    在關係數據庫中使用mysql組使用mysql組來調整查詢結果。在這裡,我們面對一個共同的挑戰:使用組的組將數據從基於行的基於列的基於列的轉換。通過子句以及條件匯總函數,例如總和或情況。讓我們考慮以下查詢: select d.data_timestamp, sum(data_id = 1 tata...
    程式設計 發佈於2025-02-06
  • 如何使用FormData()處理多個文件上傳?
    如何使用FormData()處理多個文件上傳?
    )處理多個文件輸入時,通常需要處理多個文件上傳時,通常是必要的。可以將fd.append("fileToUpload[]", files[x]);方法用於此目的,允許您在單個請求中發送多個文件。 初始嘗試 在JavaScript中,一種常見方法是:); 但是,此代碼僅處理第...
    程式設計 發佈於2025-02-06
  • 如何使用PHP從XML文件中有效地檢索屬性值?
    如何使用PHP從XML文件中有效地檢索屬性值?
    從php 您的目標可能是檢索“ varnum”屬性值,其中提取數據的傳統方法可能會使您感到困惑。 - > attributes()為$ attributeName => $ attributeValue){ echo $ attributeName,'=“',$ a...
    程式設計 發佈於2025-02-06
  • 哪種方法更有效地用於點 - 填點檢測:射線跟踪或matplotlib \的路徑contains_points?
    哪種方法更有效地用於點 - 填點檢測:射線跟踪或matplotlib \的路徑contains_points?
    在Python 射線tracing方法Matplotlib's path.contains_points FunctionMatplotlib's path.contains_points function employs a路徑對象表示多邊形。它檢查給定點是否位於定義路徑內。 T...
    程式設計 發佈於2025-02-06
  • 如何檢查對像是否具有Python中的特定屬性?
    如何檢查對像是否具有Python中的特定屬性?
    方法來確定對象屬性存在尋求一種方法來驗證對像中特定屬性的存在。考慮以下示例,其中嘗試訪問不確定屬性會引起錯誤: >>> a = someClass() >>> A.property Trackback(最近的最新電話): 文件“ ”,第1行, AttributeError:SomeClass實...
    程式設計 發佈於2025-02-06

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3