美文网首页
[react]13、受控组件

[react]13、受控组件

作者: 史记_d5da | 来源:发表于2021-11-09 07:56 被阅读0次

1、受控组件定义

在 HTML 中,表单元素(如<input><textarea><select>)通常自己维护 state,并根据用户输入进行更新。而在 React 中,可变状态(mutable state)通常保存在组件的 state 属性中,并且只能通过使用 setState()来更新。
我们可以把两者结合起来,使 React 的 state 成为“唯一数据源”。渲染表单的 React 组件还控制着用户输入过程中表单发生的操作。被 React 以这种方式控制取值的表单输入元素就叫做“受控组件”。
input受控组件的使用

import React, { PureComponent } from 'react'
export default class App extends PureComponent {
    constructor (props) {
        super(props);
        this.state = {
            message: "afad"
        }
    }
    render() {
        return (
            <div>
                <form onSubmit={ e => this.handleSubmit(e)}>
                    <label htmlFor="username" >
                        {/* 受控组件*/}
                        username: <input 
                                    type="text"
                                    id="username"
                                    onChange={e => this.handleChange(e)}
                                    value={this.state.message}></input>

                    </label>
                    <input type={"submit"} value="提交"></input>
                </form>
            </div>
        )
    }
    handleSubmit(event) {
        event.preventDefault(); // 取消默认提交行为
    }
    handleChange(event) {
        this.setState({
            message: event.target.value
        })
        console.log(event.target.value);
    }
}

select的受控组件

import React, { PureComponent } from 'react'
export default class App extends PureComponent {
    constructor (props) {
        super(props);
        this.state = {
            fruits: "orange"
        }
    }
    render() {
        return (
            <div>
                <form onSubmit={ e => this.handleSubmit(e)}>
                    <select name="fruits" onChange={e => this.handleChange(e)} value={this.state.fruits}>
                        <option value="apple">苹果</option>
                        <option value="banana">香蕉</option>
                        <option value="orange">橘子</option>
                    </select>
                    <input type={"submit"} value="提交"></input>
                </form>
            </div>
        )
    }
    handleSubmit(event) {
        event.preventDefault()
    }

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

补充知识点:

this.setState({
    // 计算属性名,动态获取key
    [this.state.name]: value
})

2、非受控组件

表单的值不使用state获取,直接通过dom获取,要使用非受控组件中的数据,那么我们需要使用 ref 来从DOM节点中获取表单数据

import React, { PureComponent, createRef } from 'react'
export default class App extends PureComponent {
    constructor (props) {
        super(props);
        this.userRef = createRef()
    }
    render() {
        return (
            <div>
                <form onSubmit={ e => this.handleSubmit(e)}>
                    <label htmlFor="username" >
                        {/* 受控组件*/}
                        username: <input 
                                    ref={(e) => {this.userRef = e}}
                                    type="text"
                                    id="username"></input>

                    </label>
                    <input type={"submit"} value="提交"></input>
                </form>
            </div>
        )
    }
    handleSubmit(event) {
        console.log(this.userRef.value)
        event.preventDefault()
    }
}

相关文章

  • [react]13、受控组件

    1、受控组件定义 在 HTML 中,表单元素(如 、 和 )通常自己维护 state,并根据用户输入进行更新...

  • react的受控组件和非受控组件

    受控组件就是可以被 react 状态控制的组件在 react 中,Input textarea 等组件默认是非受控...

  • React入门--表单与事件

    表单组件 React中的表单组件大致可分为两类 受控组件 非受控组件受控组件简单来说就是它的值由React进行管理...

  • React 的几个注意点

    受控组件和无状态组件 非受控组件推荐使用受控组件来实现表单. 在受控组件中, 表单数据是有React组件处理如果让...

  • React 初探之 受控组件 VS 非受控组件

    概述 React 中的受控组件和非受控组件都是针对于表单数据而言的。React 推荐使用受控组件来处理表单数据。 ...

  • Antd tree组件受控属性与非受控属性

    先说react受控组件与非受控组件的概念;受控组件:用户能够控制表单中的输入元素的组件叫做受控组件;说白了,每个状...

  • 受控组件和非受控组件

    受控组件 受控组件如果这个组件的状态是受react控制的就是受控组件,比如 上面的input里的name是默认我们...

  • React 受控组件

    受控组件 1. React是一个单向数据流 2.但可以自定义双向数据流组件(受控组件) 下面一个小例子:

  • 受控组件 和 非受控组件

    概览 文章内容选自陈屹的《深入React技术栈》,本文的主题是介绍受控组件与非受控组件。 内容 1、受控组件(Re...

  • react受控组件和非受控组件

    1. 非受控组件 React 要编写一个非受控组件,可以使用ref 来从DOM节点中获取表单数据,就是非受控组件。...

网友评论

      本文标题:[react]13、受控组件

      本文链接:https://www.haomeiwen.com/subject/yaiezltx.html