React学习笔记-前端框架学习-第三篇

接React学习笔记第二篇

在这里插入图片描述

此笔记只作学习使用,充分参考了React官网-文档和思否上的相关博客!
建议学习React还是要充分的学习官网上的文档教程!

表单

  • HTML表单元素与React中的其他DOM元素有所不同,因为表单元素保留一些内部状态。
  • 实例:「下面的表单只接受一个唯一的name」
<form>
<label>
    Name:
    <input type="text" name="name" />
</label>
    <input type="submit" value="Submit" />
</form>

受控组件

  • 在HTML中,<input>,<textarea>,<select>这类表单元素会维持自身状态,并根据用户输入进行更新。
  • 在React中,可变的状态通常保存在组件的状态属性中,并且只能用setState()进行更新。
  • 通过使react变成一种单一数据源的状态来结合二者。react负责的渲染表单的组件仍然控制用户后续输入时所发生的变化。
  • 其值有react控制的输入表单元素成为“受控组件”。
  • 将上例修改成如下形式
class NameForm 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.toUpperCase()});
        //限制输入全部都是大写字母
    }

    handleSubmit(event){
        alert('A name was submitted: ' + this.state.value);
        event.preventDefault();
    }

    render(){
        return (
            <form onSubmit={this.handleSubmit}>
                <label>
                    Name:
                        <input type="text" value={this.state.value} onChange={this.handleChange} />
                </label>
                <input type="submit" value="Submit" />
            </form>
        );
    }
}

textarea标签

  • 在HTML中元素通过子节点来定义它的文本内容
<textarea>
    Hello, this is some text in a text area
</textarea>
  • 在react中会用value属性来替代。
class EssayForm extends React.Component{
    constructor(props){
        super(props);
        this.state ={
            value: '请就你最喜爱的DOM元素写一篇文章'
        };
        this.handleChange = this.handleChange.bind(this);
        this.hnadleSubmit = this.handleSubmit.bind(this);
    }
    handleChange(event){
        this.setState({value: event.target.value});
    }

    handleSubmit(event){
        alert('提交文章(一篇文章被提交):' + this.state.value);
        event.preventDefault();
    }

    render(){
        return (
            <form onSubmit={this.handleSubmit}>
                <label>
                    Name:
                    <textarea value={this.state.value} onChange={this.handleChange} />
                </label>
                <input type="submit" value="Submit" />
            <form>
        );
    }

  • this.state.value是在构造函数中初始化,这样文本区域就能获取其中的文本。

select标签

在HTML中,会创建一个下拉列表,

<select>
    <option value="grapefruit">Grapefruit</option>
    <option value="lime">Lime</option>
    <option selected value="coconut">Coconut</option>
    <option value="mango">Mango</option>
</select>
  • 在react中,不使用select属性,在根select标签上用value属性来表示选中项。
class Flavorm extends REact.Component{
    constructor(props){
        super(props);
        this.state = {value: 'coconut'};

        this.handleChange = this.handleChange.bind(this);
        this.handleSubmit = this.handleSubmit.bind(this);
    }

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

    handleSubmit(event){
        alert('Your favorite flavor is: ' + this.state.value);
        event.prevenDefault();
    }

    render(){
        return (
            <form onSubmit={this.handleSubmit}>
                <label>
                Pick your favorite La Croix flavor:
            <select value={this.state.value} onChange={this.handleChange}>
                <option value="grapefruit">Grapefruit</option>
            <option value="lime">Lime</option>
            <option value="coconut">Coconut</option>
            <option value="mango">Mango</option>
          </select>
        </label>
        <input type="submit" value="Submit" />
      </form>
        );
    }
}

file input

在HTML中允许用户从他们的存储设备中选择一个或多个文件以提交表单的方式上传到服务器,或者通过JS的file API 对文件进行操作。

<input type="file" />
<!-- 该标签的value属性是只读的,是React中的一个非受控组件 -->

多个输入的解决办法

  • 当处理多个受控input元素时,可以通过给每个元素添加一个name属性,来处理函数根据event.target.name的值来选择做什么。
class Reservation extends React.Component{
    constructor(props){
        super(props){
            this.state ={
                isGoing: true,
                numberOfGuests: 2
            };
            this.handleInputChange = this.handleInputChange.bind(this);
        }
        handleInputChange(event){
            const target = event.target;
            const value = target.type === 'checkbox' ? target.check : target.value;
            const name = target.name;

            this.setState({
                [name]: value
            });
        }

        render(){
            return (
                <form>
                    <label>
                        Is going:
                        <input
                            name="isGoing"
                            type="checkbox"
                            checked={this.state.isGoing}
                            onChange={this.handleInputChange} />
                    </label>
                    <br />
                    <label>
                        Number of guests:
                        <input
                            name="numberOfGuests"
                            type="number"
                            value={this.state.numberOfGuests}
                            onChange={this.handleInputChange} />
                    </label>
                <form>
            );
        }
 }

状态提升

  • 当几个组件需要共用状态数据时,最好将共享的状态提升至他们最近的父组件当中进行管理。

  • 官网文档有一个实例:根据温度判断返回内容

  • 在React应用中,对任何可变数据应当只有一个单一“数据源”。

    • 数据流自上而下

此笔记只作学习使用,充分参考了React官网-文档和思否上的相关博客!
建议学习React还是要充分的学习官网上的文档教程!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
电子图书资源服务系统是一款基于 Java Swing 的 C-S 应用,旨在提供电子图书资源一站式服务,可从系统提供的图书资源直接检索资源并进行下载。.zip优质项目,资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松copy复刻,拿到资料包后可轻松复现出一样的项目。 本人系统开发经验充足,有任何使用问题欢迎随时与我联系,我会及时为你解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(若有),项目具体内容可查看下方的资源详情。 【附带帮助】: 若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步。 【本人专注计算机领域】: 有任何使用问题欢迎随时与我联系,我会及时解答,第一时间为你提供帮助,CSDN博客端可私信,为你解惑,欢迎交流。 【适合场景】: 相关项目设计,皆可应用在项目开发、毕业设计、课程设计、期末/期/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面 可借鉴此优质项目实现复刻,也可以基于此项目进行扩展来开发出更多功能 【无积分此资源可联系获取】 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。积分/付费仅作为资源整理辛苦费用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值