首页 > 其他分享 >React19来了,新特性

React19来了,新特性

时间:2024-05-28 13:32:49浏览次数:20  
标签:use const 特性 React React19 服务器 组件 return

千呼万唤的React19来了. 虽然现在还是beta版本,但是不耽误大家提前准备学习下

        今天medium的订阅推送了一个React19的新特性,觉得很不错,提炼点精华的说下

React19 是4月25号推出的beta版,从版本号大家已经可以了解到这是React的一大版本的升级.这也标志着18版本进入收尾阶段了.因为现在是beta版本,所以还有很多不确定性的功能和问题

 优化表单提交和更新(Form submissions and optimistic updates)

 大家肯定都遇到到过也解决过这种需求,提交一个表单,如果提交失败返回错误提示,提交成功存储db‘s server. 举个简单的例子:
 

import React, {useState, useCallback} from 'react'

const submitForm = async () => {/** form submit */}

export function Component () {
    const [formState, setFormState] = useState(null);
    const [isPending, setIsPending] = useState(false);

    const formAction = useCallback( async (e) => {
        e.prevenDefault();
        setIsPending(true);
        try {
            const result = await submitForm()
            setFormState(result)
        } catch (err) {
            setFormState({message:'Failed to complete action'})
        }
        setIsPending(false)
    },[])
    // 这里使用的useCallback防止deep render
    return (
        <form onSubmit={formAction}>
            {/** Form Template */}
        </form>
    )
}

 代码很简单.概述下在React18中以非紧急的方式从一个试图过渡到另一个试图的过程就是transitions(过渡) .在React19中支持转场(过渡)异步函数.而去可以使用useTransitions这个hook挂载并在异步数据获取过程中管理加载指示符或占位符的显示。

1.1 useActionState

新的hooks useActionState

支持3个三个参数
1. action:当form表单trigger的时候调用的函数

2. initial state:表单初始化的状态

3.一个绝对路径:指明表单要跳转的页面link ---> optional的选配

返回值也有三个
1.state: 当前返回的表单状态

2. dispatch:从aciton tirgger的函数 (redux 熟悉的很好理解)

3.isPending:一个boolean类型的状态isPending

引用一张图:画的很好

当表单提交的时候,作为useActionState的第一参数(action)传递下的函数将被触发.并返回我们期望提交是否成功的状态.Action 的函数接受2个参数,一个当前的from状态和触发表单时的数据.

1.2 使用实例
 

import {useActionState} from 'react'

const submitForm = async (formData) => {
    /* from submit fn that call API */
}

const action = async (currentState, formData) => {
    try {
        const result = await submitForm(formData)
        return {message: result}
    } catch (error) {
        return {message: error.message}
    }
}
export function Component () {
    const [state, dispatch, isPending] = useActionState(action, null)
    //...
}

这就是一个基本的架子.接下来完善下我们的isPending, state. dispatch.


1.3 <form> 的Action

在React19中,from 元素扩展了属性action 它能获取到一个提交触发的action的函数.也就是我们传递过来的dispatch

    return (
        <form action={dispatch}>
            {/** ...*/}
        </form>
    )

完整代码:
 

import {useActionState} from 'react'

const submitForm = async (formData) => {
    /* from submit fn that call API */
}

const action = async (currentState, formData) => {
    try {
        const result = await submitForm(formData)
        return {message: result}
    } catch (error) {
        return {message: error.message}
    }
}
export function Component () {
    const [state, dispatch, isPending] = useActionState(action, null)
    
    return (
        <form action={dispatch}>
            <input type="text" name="text" disabled={isPending} />
            <button type="submit" disabled={isPending}> 
                Add Todo 
            </button>
            {state.message && <h4>{state.message}</h4>}
        </form>
    )
}

不错吧,对比下React18的时候,是不是简洁很多.不必担心再忘记使用useCallback勾子了.

1.2 useFormStatus

在React19中新的加的一个勾子
获取上一次提交的状态信息

import{ useFormStatus} from 'react'

export function NestedComponent() { 
    // 获取表单信息
    const {pending, data, method, action} = useFormStatus();
   // 这里写个blog没提到的官网写法:
   // const status = useFormStatus();
    return (
        /* tempalte */
    )
}

来个

标签:use,const,特性,React,React19,服务器,组件,return
From: https://blog.csdn.net/EvanYYY1/article/details/139258753

相关文章

  • 聊聊如何感知项目引入哪些功能特性
    前言使用过springcloud全家桶朋友,应该知道springcloud涉及的组件很多,为了让开发者快速了解项目引入了springcloud哪些组件,springcloud引入了HasFeatures,配合Actuator,可以让开发者感知到项目引入的组件功能类型、名称、版本以及对应的开发商。今天我们就利用这个特性,自己实现一把......
  • JAVA课堂笔记15(面向对象的三大特性)
    第八章:面向对象的三大特性[封装、继承、多态]三.多态:1.理解:(1)父类型的引用存储不同子类型的对象  父类类名引用名=new子类类名();    引用    对象    父类型   子类型(2)以父类型的引用调用......
  • 传统的ASP.NET Web Form程序如何使用最新的MSBuild特性
    摘要旧的.csproj文件,在使用NuGet包的时候,会随着引用一个包,一下子添加n多个包。我们把旧的.csproj文件迁移到最新的格式,就能避免这个问题。直接上效果<ProjectToolsVersion="12.0"DefaultTargets="Build"Sdk="Microsoft.NET.Sdk.Web"xmlns="http://schemas.microsoft.com/de......
  • Java 三大特性之封装(包含构造器,this关键字详解)
    java封装在Java中,面向对象的封装(Encapsulation)是一种将对象的属性和行为(数据和方法)包装在一起,隐藏对象的属性和实现细节,仅对外提供公共访问方式来操作该对象的方法。封装的主要目的是增强安全性和简化编程,同时使代码更易于维护和扩展。java封装的特点1.良好的封装能够减少......
  • java 三大特性之多态
    多态多态就是基于继承条件下,具有对象多态(一个人可以是儿子,可以是父亲等),行为多态(都可以跑,但跑的有快有慢)。特点1.多态存在方法重写2.多态编译看左边,运行看右边3.变量没有多态性4.多态下不能使用子类的独有功能好处多态可以使程序有良好的扩展,并可以对所有类的对象进行通......
  • JDK1.8新特性
    Lambda表达式又称为函数式编程面向对象思想:想要做什么事情,就需要创建这个类的对象,通过对象来完成某些事情函数式的思想:忽略了面向对象复杂的语法,强调做什么,而不是以什么形式做面向对象的思想实现多线程publicclassRunnableImplimplementsRunnable{@Override......
  • ES2020新特性概览
    以下是ES2020版本中的一些新特性:Promise.allSettled:Promise.allSettled()方法返回一个在所有给定的promise已被决议或被拒绝后决议的promise,返回的promise根据每个Promise的结果状态决定其决议方式(注意:与Promise.all()不同,Promise.all()只有全部成功时才会返回成功,有一个......
  • 传感器的静态特性
    传感器的静态特性是指传感器在稳态(输入量为常量或变化极慢时)输入信号作用下,传感器输出与输入信号之间的关系。这种关系一般用曲线、数学表达式或表格来表示。传感器的静态特性是传感器的基本特性之一,其描述了传感器在不考虑迟滞、蠕变和不稳定性等因素时的输入输出关系。衡......
  • lightdb 24.1新特性
    J.1. 版本发布13.8-24.1J.1.1.Oracle兼容J.1.2.plorasql增强J.1.3.MySQL兼容J.1.4.lightdb新特性J.1.5.ltjdbc增强版本发布日期:. 2024年04月30日J.1.1. Oracle兼容支持groupby常量,即支持按常量分组聚集,其中分组字段可以有一个或多个常量字段......
  • 【Java笔记】第8章:面向对象的三大特性(封装、继承、多态)
    前言1.三大特性概述2.封装3.继承4.多态结语#include<GUIQU.h>intmain{上期回顾:【Java笔记】第7章:面向对象个人主页:C_GUIQU归属专栏:【Java学习】return一键三连;}前言各位小伙伴大家好!上期小编给大家讲解了Java中的面向对象,接下来讲讲Java中面向......