受控组件——受控组件简写——受控表单组件-——复选框取消全选等

Posted 勇敢*牛牛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了受控组件——受控组件简写——受控表单组件-——复选框取消全选等相关的知识,希望对你有一定的参考价值。

受控组件

将state与表单项中的value值绑定在一起,有state的值来控制表单元素的值,称为受控组件。
绑定步骤:
💖在state中添加一个状态,作为表单元素的value值
💖给表单元素绑定change事件,将表单元素的值设置为state的值

<input type="text" value=this.state.username onChange=this.inputChange.bind(this) />

注:多表单元素需优化事件方法
this.setState(
    [e.target.name]: e.target.value
)

没有和state数据源进行关联的表单项,而是借助ref,使用元素DOM方式获取表单元素值
使用步骤
💖调用 React.createRef() 方法创建ref对象
💖将创建好的 ref 对象添加到文本框中
💖通过ref对象获取到文本框的值


受控组件简写——登录组件

loginForm.js

export default (_this)=>(
    username:
        value:"admin",
        onChange:e=>_this.setState(state=>(username:...state.username,value:e.target.value.trim()))
    ,
    password:
        value:"admin123",
        onChange:e=>_this.setState(state=>(password:...state.password,value:e.target.value.trim()))
    
)

app.jsx

import React,  Component  from 'react';
import loginForm from 'userfrom/loginForm';
class App extends Component 
    state=
       ...loginForm(this)
    
    setValue = (name)=>(evt)=>
        this.setState(
            [name]:evt.target.value.trim()
        )
    
    login = () => 
        console.log(this.state);
    
    render() 
        let username,password = this.state;
        return (
            <div>
                <input type="text" ...username/>
                <hr />
                <input type="text" ...password/>
                <hr />
                <button onClick=this.login>点击登录</button>
            </div>
        );
    


export default App;


受控表单组件_单选_单个复选_多选框

输入框 :value和onchange的绑定
单选、单个复选框。多个复选框

单选:一个元素,默认值

import React,  Component  from 'react';

class App extends Component 
    state=
        username:'',
        sex:'女'
    
    render() 
        let username,sex = this.state;
        return (
            <div>
                <div>
                    <input type="text" value=username onChange=e=>this.setState(username:e.target.value)/>
                </div>
                <hr />
                <div>
                    <input type="radio" checked=sex === '男' value="男" name="sex" onChange=e=>this.setState(sex:e.target.value)/><input type="radio" checked=sex === '女' value="女" name="sex" onChange=e=>this.setState(sex:e.target.value)/></div>

            </div>
        );
    


export default App;

单个复选框:boolan值

<input
	type="checkbox"
	checked=isshow
	onChange=(e) => this.setState( isshow: e.target.checked )
/>

多选框就是:数组


setLessonsFn = (e) => 
    if (e.target.checked) 
        this.setState((state) => (
            lessons: [...state.lessons, e.target.value],
        ));
     else 
        this.setState((state) => (
            lessons: state.lessons.filter((item) => item != e.target.value),
        ));
    
;
+++++++++++++++
<div>
<input
	type="checkbox"
	value="html"
	checked=lessons.includes("html")
	onChange=this.setLessonsFn
/>
html
<input
	type="checkbox"
	value="css"
	checked=lessons.includes("css")
	onChange=this.setLessonsFn
/>
<input
	type="checkbox"
	value="js"
	checked=lessons.includes("js")
	onChange=this.setLessonsFn
/>
js
</div>

以上是关于受控组件——受控组件简写——受控表单组件-——复选框取消全选等的主要内容,如果未能解决你的问题,请参考以下文章

什么是 React 受控组件和非受控组件?

反应:HTML 表单应该是受控组件还是不受控组件?

React -- 受控组件和非受控组件

不受控组件

React5.表单处理-受控组件

React5.表单处理-受控组件