React官方文档--Forms

react Ant Design项目常用官网参考汇总 本学期选修了一门《HTML5应用开发技术》,期间有个项目打卡是学习react项目(共享单车管理系统),主要是前端的项目实现。 该打卡项目以Ant Design为主,在学习的过程中查看了非常多的官网及其链接。 互联网时代,计算机技术更新是非常快的,包括ant design在内的各个组件/插件/文档也是迅速更新。因此在开发项目的过程中,官方文档显得尤为重要。 由此,写下这一篇博客,用来记录常用于react项目的官方链接,以便日后查看或者直接访问。 Ant Design 官方网址: 网址1(速度较慢):htt. 阅读详情

Forms

表单组件,比如:<input>,<textarea>和<option>和基本的组件不同,因为表单组件是需要用户进行交互的。这些组件提供了接口,用来更容易的管理表单来响应用户的交互。
有两种形式的表单组件
1. Controlled Components
2. Uncontrolled Components

Controlled Components

一个受控表单组件提供一个value属性,一个受控表单组件不会维持其内部自己的状态,组件只根据props进行渲染。

render() {
    return (
        <input
            type="text"
            value="Hello!"
        />
    )
}

如果你试图去运行这里例子,会发现输入框里的内容不会随着输入而改变。因为你声明了这个组件的value值,为了更新value作为用户输入的响应,需要添加onChange事件来保存新的值,然后传递这个值给value属性。

class Form extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            value:""
        };
        this.handleChange = this.handleChange.bind(this);
        this.handleSubmit = this.handleSubmit.bind(this);
    }

    handleChange(event) {
        this.setState({
            value: event.target.value
        });
    }

    handleSubmit(event) {
        console.log("Text field value is : " + this.state.value);
    }

    render() {
        return (
            <div>
                <input type="text" placeholder="Hello!"
                value={this.state.value} onChange={this.handleChange}/>
                <button onClick={this.handleSubmit}>
                    Submit
                </button>
            </div>
        )
    }
}

ReactDOM.render(
    <Form />,
    document.getElementById("root")
);

在这个例子中,我们接受用户提供的值,来更新value 的值,这种方法使得继承接口或者进行表单验证变得很方便

handleChange(event) {
    this.setState({
        value: event.target.value.substr(0, 14)
    });
}

Checkboxes和RadioButton存在的潜在问题

在使用React来监听checkbox或者radio的事件的时候,React监听一个click的浏览器事件来声明一个onChange事件,在大部分情况下这样是没有什么问题的,除非当你调用了preventDefault()在change的事件处理函数里面,preventDefault会停止浏览器在视觉上更新输入,即使checked的值已经改变了,这个问题可以通过不调用preventDefault或者将切换checked的值放在setTimeout中执行来解决。

非受控组件

不提供value属性的表单组件称为非受控组件。下面的例子渲染了一个<input>来控制一个空的值,任何用户输入的值会立刻影响到渲染的元素。
一个非受控组件管理他自己的状态。

render() {
    return <input type="text" />
}

如果你希望监听这个组件的值的更新,你需要使用onChange事件来监听,就像受控组件一样,但是不能给组件传递任何值。

class Form extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            value: ''
        };
        this.handleChange = this.handleChange.bind(this);
        this.handleSubmit = this.handleSubmit.bind(this);
    }

    handleChange(event) {
        this.setState({
            value: event.target.value
        });
    }

    handleSubmit(event) {
        alert("Text field value is : " + this.state.value);
    }

    render() {
        return (
            <div>
                <input 
                    type="text"
                    placeholder="Hello!"
                    onChange={this.handleChange} />
                <button onClick={this.handleSubmit}>
                    Submit
                </button>
            </div>
        );
    }
}

ReactDOM.render(
    <Form />,
    document.getElementById("root")
)

当这个例子输入value的时候,我们可以通过handleSubmit()来读取,非受控表单组件不能够请求,你需要完整的onChange事件处理来取代读取value。

默认值

使用一个非空的value来初始化一个非受控组件,你可以使用一个defaultValue属性

render() {
    return <input type="text" defaultValue="Hello" />
}

同样地,<input type="checkbox">和<input type="radio">支持defaultChecked然后<select>支持defaultValue。

交互属性

表单组件支持一系列的props会通过用户交互影响组件。
1. value,是<input>和<textarea>支持的组件。
2. checked,是<input>组件的checkbox和radio支持的
3. selected,是<option>组件支持的。
在HTML中,<textarea>的值是通过子元素来设置的,在React中,需要使用value来替代
表单组件允许通过onChange属性的回调函数来监听修改,onChange属性通过浏览器和用户交互的响应。

进阶技术

为什么使用受控组件

使用类似<input>的表单组件是和传统的HTML不相同的。

<input type="text" name="title" value="Untitle">

上面的代码渲染初始化了一个value为Untitle。当用户更新输入的时候,这个节点的value属性也会改变,然而使用node.getAttribute('value')仍然会返回初始化的时候的值:Untitled。
与HTML不同的是,React组件必须一致保持其状态,也就是自从渲染之后,value的值一直保持为Untitled。

Why Textarea Value

在HTML,<textarea>的值应该是其子元素的值。

<textarea name="description">This is the description.</textarea>

在HTML中,很容易允许开发人员提供多行的值,然而,在React中,我们不能够设置多行的字符串,如果要换行的话需要使用\n,在有value和defaultValue的时候,因为这个原因,你不需要使用子元素来设置<textarea>的值。

<textarea name="description" value="This is a description.">

Why Select Value

option在<select>中是用selected属性来进行判断选择的,但是在React的组件中,是使用value属性的。

<select value="B">
    <option value="A">Apple</option>
    <option value="B">Banana</option>
    <option value="C">Cranberry</option>
</select>

使用非受控组件的话,这里需要使用defaultValue

受控输入框

class Form extends React.Component {
    constructor(props) {
        super(props);
        this.state = { value: '' };
        this.handleChange = this.handleChange.bind(this);
        this.handleSubmit = this.handleSubmit.bind(this);
    }

    handleChange(event) {
        this.setState({
            value: event.target.value
        });
    }

    handleSubmit(event) {
        alert('Text field value is: ' + this.state.value);
    }

    render() {
        return (
            <div>
                <input
                type="text"
                placeholder="edit me"
                value={this.state.value}
                onChange={this.handleChange}
                />
                <button onClick={this.handleSubmit}>
                    Submit
                </button>
            </div>
        );
    }
}

ReactDOM.render(
    <Form />,
    document.getElementById('root')
);

受控文本区组件

class Form extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            value: ""
        }
        this.handleChange = this.handleChange.bind(this);
        this.handleSubmit = this.handleSubmit.bind(this);
    }

    handleChange(event) {
        this.setState({
            value: event.target.value
        });
    }

    handleSubmit(event) {
        alert("Textarea value is: " + this.state.value);
    }

    render() {
        return (
            <div>
                <textarea
                    name="description"
                    value={this.state.value}
                    onChange={this.handleChange}
                />
                <br/>
                <button onClick={this.handleSubmit}>
                    Submit
                </button>
            </div>
        )
    }
}

ReactDOM.render(
    <Form />,
    document.getElementById("root")
);

受控下拉列表

class Form extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            value: ""
        }
        this.handleChange = this.handleChange.bind(this);
        this.handleSubmit = this.handleSubmit.bind(this);
    }

    handleChange(event) {
        this.setState({
            value: event.target.value
        });
    }

    handleSubmit(event) {
        alert("Select value is: " + this.state.value);
    }

    render() {
        return (
            <div>
                <select value={this.state.value} onChange={this.handleChange}>
                    <option value="A">Apple</option>
                    <option value="B">Banana</option>
                    <option value="C">Cranberry</option>
                </select>
                <br/>
                <button onClick={this.handleSubmit}>
                    Submit
                </button>
            </div>
        )
    }
}

ReactDOM.render(
    <Form />,
    document.getElementById("root")
);

非受控单选按钮

class Form extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            value: "B"
        }
        this.handleChange = this.handleChange.bind(this);
        this.handleSubmit = this.handleSubmit.bind(this);
    }

    handleChange(event) {
        this.setState({
            value: event.target.value
        });
    }

    handleSubmit(event) {
        alert("Radio button value is: " + this.state.value);
    }

    render() {
        return (
            <div>
                <label>
                    <input type="radio" name="choice" value="A" onChange={this.handleChange}/>
                    Option A
                </label>
                <label>
                    <input type="radio" name="choice" value="B" onChange={this.handleChange}/>
                    Option B
                </label>
                <label>
                    <input type="radio" defaultChecked={true} name="choice" value="C" onChange={this.handleChange}/>
                    Option C
                </label>
                <br/>
                <button onClick={this.handleSubmit}>
                    Submit
                </button>
            </div>
        )
    }
}

ReactDOM.render(
    <Form />,
    document.getElementById("root")
);

非受控复选框

class Form extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            checked: {
                'A': false,
                'B': true,
                'C': false
            }
        };
        this.handleChange = this.handleChange.bind(this);
        this.handleSubmit = this.handleSubmit.bind(this);
    }

    handleChange(event) {
        const value = event.target.value;

        const checked = Object.assign({}, this.state.checked);
        if (!checked[value]) {
            checked[value] = true;
        } else {
            checked[value] = false;
        }
        this.setState({checked});
    }

    handleSubmit(event) {
        alert("Boxes checked: " + 
            (this.state.checked.A ? 'A ' : ' ') +
            (this.state.checked.B ? 'B ' : ' ') +
            (this.state.checked.C ? 'C ' : ' ')
        );
    }

    render() {
        return (
            <div>
                <label>
                    <input type="checkbox" value="A" onChange={this.handleChange} />
                    Option A
                </label>
                <label>
                    <input type="checkbox" value="B" onChange={this.handleChange} defaultChecked={true}/>
                    Option B
                </label>
                <label>
                    <input type="checkbox" value="C" onChange={this.handleChange} />
                    Option C
                </label>
                <button onClick={this.handleSubmit}>
                    Submit
                </button>
            </div>
        )
    }
}

ReactDOM.render(
    <Form />,
    document.getElementById("root")
);      
ASP.NET Web Forms深度解析:从Page生命周期到生产部署 ASP.NET Web Forms是微软早期面向Windows平台的Web开发模型,其核心在于事件驱动、服务端控件与ViewState状态维持机制。理解其Page生命周期、Postback协议映射、HttpModule管道介入等底层原理,不仅有助于维护大量现存的.NET Framework遗留系统,更能反向深化对现代框架(如ASP.NET Core中间件、React状态管理)设计哲学的认知。在政务、金融、央企等强合规场景中,Web Forms仍承担着关键业务系统支撑任务,尤其在需零操作习惯变更、快速改造VB 阅读详情

相关推荐

ASP.NET Web Forms核心原理:页面生命周期与ViewState机制解析

Web开发中,服务端渲染与状态管理是理解HTTP无状态本质的关键入口。ASP.NET Web Forms作为早期成熟的事件驱动模型,其页面生命周期、ViewState序列化、PostBack机制等设计,深刻体现了在无状态协议上构建有状态交互的工程智慧。它虽已非主流,但其控件树管理、服务端事件绑定、视图状态同步等思想,持续影响着Blazor Server、低代码平台乃至现代SSR框架的状态同步逻辑。掌握Page.IsPostBack判定条件、ViewState二进制序列化原理及ClientID生成规则,不仅能

diaozhiwa5526的博客 397

Ant Design官方网站

访问Ant Design官方网站的中文文档: 中文官方文档网址:https://ant.design/docs/react/introduce-cn

qq_40204867的博客 1069

[统计模型] 基于R的潜在剖面分析(LPA)

本文主要介绍基于R进行潜在剖面分析(Latent Profile Aanalysis, LPA)。 关于潜在类别分析LCA/潜在剖面分析LPA的概念和区别,可以参考一下这篇文章: 潜在类别分析LCA \潜在剖面分析LPA介绍https://www.jianshu.com/p/4c830094131e?utm_campaign=maleskine 但是此文对潜类别分析的阐释还比较生涩,而且没有具体的代码编写、模型优选等内容。本文旨在丰富LPA的内容,并希望和大家交流、共同进步。 1. 什么是潜类别分.

bigstar863的博客 1万+

使用AntdPro创建基于React的管理后台(学习笔记4)(技术笔记2)中 <火山引擎后台管理>商品模块的实现;有代码结构简析;文末附有源码

.商品模块的实现;有代码结构简析;文末附有源码

房森的博客 2782

安卓风控对抗实战:如何用AOSP定制ROM绕过Momo、AIDA64等检测(从环境搭建到设备画像)

本文详细解析了如何通过定制AOSP ROM绕过Momo、AIDA64等安卓风控检测工具的设备指纹识别。从环境搭建到硬件参数修改,再到内核级特征混淆,提供了一套完整的底层对抗方案,显著提升设备伪装通过率。

weixin_30687051的博客 488

RK3588-NANOPC-T6移植ubuntu+xenomai内核

更具网址下载相应的内核。导入到开发板并执行内核。

qq_42007446的博客 572

React 受控组件

但是为什么在使用Ant Design的时候初始值传undefined就没有问题呢,那肯定是Ant Design已经做过处理啦。在开发react项目中受控组件已经是老生常谈的事情了,但是当自己封装Input组件的时候发现就算不绑定onChange事件也能正常使用,查阅官方文档后发现value必须始终传字符串。可以看到在绑定value的时候其实是经过了fixControlledValue的处理了的,如果值为undefined或者null就返回空字符串。

ZY9458的博客 236

电磁仿真新手必看:如何用CST Studio Suite 2023完成第一个PCB辐射仿真?

本文详细解析了如何使用CST Studio Suite 2023进行PCB辐射仿真,适合电磁仿真新手快速上手。从工程准备、求解器配置到端口设置和后处理技巧,全面覆盖三维全波电磁场仿真软件的核心操作步骤,帮助工程师精准预测和解决PCB电磁辐射问题。

y7z8a9的博客 731

React与Ant Design入门指南

Ant Design是一个致力于提供企业级UI设计的语言和React实现的解决方案。它提供了丰富的组件,遵循了统一的设计规范,能够满足大部分业务需求,并且易于定制。Ant Design支持通过修改变量来自定义主题颜色等样式。你可以通过配置.less文件来实现这一点。更多细节请参考官方文档。以上是关于如何在React项目中集成Ant Design的基本介绍。更多信息请访问Ant Design官网查看完整文档。

m0_56896669的博客 1349

《深入掌握PostgreSQL数据库》 - 专栏介绍和目录

本专栏系统讲解PostgreSQL数据库的全栈知识,涵盖基础入门到高级实战。内容分为语言基础与进阶、核心原理、高可用架构、性能优化、运维管理、扩展开发等多个模块。从安装配置、数据类型选择到窗口函数、CTE等高级特性,再到索引优化、执行计划分析等性能调优技巧,全面解析PostgreSQL的核心功能。同时深入探讨MVCC机制、WAL日志、并发控制等底层原理,并分享高可用架构设计、备份恢复等运维实践。适合各层次开发者系统学习PostgreSQL,掌握这一强大开源数据库的关键技术。

数据知道的博客 3445

vue支付项目-APP支付宝支付功能

如果用户已安装支付宝客户端,商家 App 唤起支付宝完成支付,支付完后跳回到商家 App 内,最后展示支付结果。如果用户没有安装支付宝客户端,商家 App 内会调起支付宝网页支付收银台,用户登录支付宝账号,支付完后展示支付结果。1.点击按钮开通或者续费,会验证是否选择会员商品以及对协议是否查看选中(这里根据项目需要自行验证,可忽略),验证通过打开选择支付方式弹窗页面,选择微信支付或者支付宝支付;4.可取消支付,放弃支付会返回会员页面,页面提示支付取消;1.判断支付方式,如果是2,则是支付宝支付方式。

总结前端开发中遇到的问题,分享前端知识 1万+

Reactjs入门官方文档(八)【forms】

表单 译自reactjs官方文档 HTML表单通常保存了一些内部状态, 所以它们的工作方式在React中和其他DOM对象有点不同.

极客神殿 719

基于STM32的智能浇花系统毕业设计(全部资料)

摘要:本文设计了一种基于STM32单片机的智能浇花系统,集成了环境温湿度检测、土壤温湿度监测、LCD显示、Wi-Fi联网及手机APP远程控制等功能。系统通过传感器实时采集环境参数,自动控制水泵工作实现智能灌溉,同时支持用户通过手机APP远程监控和调节。论文详细阐述了硬件选型、软件设计及系统测试过程,验证了系统的稳定性和实用性。该设计为家庭园艺提供了智能化解决方案,具有节水高效、操作便捷等特点。关键词:STM32;智能灌溉;远程控制;环境监测;Wi-Fi通信。

3254968421的博客 1194

《React官方文档》之Forms

原文链接 译者:黄文海 表单(Forms) 诸如<input>、<textarea>和<option>的表单组件与其它原生(native)组件不同,因为它们可以通过用户交互而被改变。这些组件提供的接口使得管理表单对用户交互的响应更加容易。 有关<form>事件的信息见Form Events。 交互...

weixin_34274029的博客 129

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

newforms 完全入门:React 同构表单处理库(Django forms 移植),一文讲透表单校验

还在手写 React 表单的校验逻辑吗?**newforms** 是一个专为 React 打造的**同构(Isomorphic)表单处理库**,脱胎于 Django 的 django.forms 表单体系,帮你三步搞定表单渲染、**表单校验**与数据类型转换。这篇文章带你从概念到源码模块一次看懂,轻松上手机器学习 React 表单校验。🚀 ## 什么是 newforms?为什么选一个"同构"表

gitblog_00969的博客 450

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Quill Forms 安装与配置指南

Quill Forms 安装与配置指南 1. 项目基础介绍 Quill Forms 是一个开源项目,旨在提供一个基于 React 和 TypeScript 的类型表单替代方案。它是一个对话式的多步骤表单,可以用来创建调查问卷、在线考试、申请表等多种表单应用。项目灵感来源于 WordPress 的 Gutenberg 项目和其区块概念。 主要编程语言:TypeScript 和 JavaScript。...

gitblog_00816的博客 633

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

React + TypeScript 实践

当我们需要一个 id 函数,函数的参数可以是任何值,返回值就是将参数原样返回,并且其只能接受一个参数,在 js 时代我们会很轻易地甩出一行。某些场景下我们在引入第三方的库时会发现想要使用的组件并没有导出我们需要的组件参数类型或者返回值类型,这时候我们可以通过。下面这个组件的 name 属性都是指定了传参格式,如果想不指定,而是想通过传入参数的类型去推导实际类型,这就要用到泛型。由于其可以接受任意值,也就是说我们的函数的入参和返回值都应该可以是任意类型,如果不使用泛型,我们只能重复的进行定义。

ice_cream__的博客 2276

React 表单库终极对比:HouseForm vs Formik vs React Hook Form 怎么选?

在 React 生态中,选择一款合适的 **React 表单库**是每个前端开发者绕不开的课题。本文将对 HouseForm、Formik、React Hook Form 三款主流 **React 表单验证库** 进行全方位对比,从体积、验证方式、性能、维护状态等维度帮你快速做出选择。 [![React 表单库对比指南:HouseForm 项目横幅](https://raw.gitcode.co

gitblog_00573的博客 211

Indie UI:免费React组件库终极指南 — 让你的Web应用开发效率提升10倍

Indie UI 是一个功能丰富的免费 React 组件库,它提供了大量精美的 UI 组件,能够帮助开发者快速构建出视觉吸引力强、交互体验优秀的 Web 应用。无论是按钮、卡片、表单还是动画效果,Indie UI 都能满足你的需求,让你从繁琐的 UI 开发中解脱出来,专注于业务逻辑的实现,从而极大地提升开发效率。 ## 🌟 Indie UI 的核心优势 Indie UI 之所以能成为开发者的

gitblog_00632的博客 878

React 面试备考计划怎么排:哪些核心概念优先练、哪些可以跳过?

如果你近期有 React 技术面,要在有限时间里决定「练什么、跳过什么」,front-end-interview-handbook 仓库中的 React Interview Playbook(`packages/react-interview-playbook/`)给出了明确答案:一份四步备考计划、一份面试重要概念清单,以及一份「大概率考不到、可以跳过」的概念清单。本文按仓库文档把这条路径整理出来

gitblog_00231的博客 442

HouseForm 跨端实践:一套 API 同时搞定 Web 与 React Native 表单校验

> 关键词:React Native 表单校验、HouseForm React 表单库、跨端表单方案 在移动端与 Web 端并行的业务开发中,"一份表单逻辑写两遍"是不少团队的痛点:Web 用一套 React 表单库,React Native 又要另起炉灶,校验规则、错误提示、表单状态全都重复维护。**HouseForm** 正是为解决这个问题而生的 React 表单库,它采用 headless

gitblog_01103的博客 1043

React Hook Form DevTools常见问题解答:新手必看

React Hook Form DevTools 是一款专为 React Hook Form 设计的调试工具,能够帮助开发者深入了解表单细节,高效排查问题。本文将解答新手在使用过程中可能遇到的常见问题,助你快速掌握这款实用工具。 ## 一、安装与配置 ### 1. 如何安装 React Hook Form DevTools? 安装 React Hook Form DevTools 非常简单,只

gitblog_00357的博客 260

【TS】1109- React + TypeScript 实践经验总结

❗️ 准备知识熟悉 React熟悉 TypeScript (参考书籍:2ality's guide[1], 初学者建议阅读:chibicode's tutorial[2])熟读 React...

pingan8787 953

如何在10分钟内上手Indie UI?React开发者必备的Tailwind组件库快速入门

Indie UI是一个专为React开发者打造的Tailwind组件库,提供丰富的UI组件集合,帮助开发者快速构建现代化Web应用。本文将带你在10分钟内完成Indie UI的环境搭建和基础使用,让你轻松掌握这个强大的组件库。 [![Indie UI组件库封面图](https://raw.gitcode.com/gh_mirrors/in/indie-ui/raw/4d5aafc3c09d07e

gitblog_00619的博客 796

10 分钟上手 HouseForm:从零构建你的第一个 React 表单校验示例

HouseForm 是一款简单易用的 React 表单校验库,它的核心设计理念是"字段优先":让每个字段的校验逻辑和 UI 代码放在一起,告别传统表单库"表单状态在顶层、校验逻辑在 schema、渲染在组件"的割裂体验。本文带你用 10 分钟从零构建一个带实时校验的 React 表单示例,安装依赖、创建字段、配置校验规则,一次跑通。 [![HouseForm React 表单校验库官方宣传图](

gitblog_00218的博客 254
上一篇: React官方文档--Lists and Keys
下一篇: React官方文档--Lifting State Up
cithegod
博客等级 码龄12年 9粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值