react中的受控组件与非受控组件

非受控组件:现用现取

复制代码
<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8" />
    <title>react中的受控组件与非受控组件</title>
    <script src="https://unpkg.com/react@18/umd/react.development.js"></script>
    <script src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
    <script src="https://unpkg.com/@babel/standalone@7/babel.min.js"></script>
    <script src="https://unpkg.com/prop-types@15.8.1/prop-types.js"></script>
</head>

<body>
    <div id="root"></div>

    <script type="text/babel">
        const root = ReactDOM.createRoot(document.getElementById('root'));
        class MyComponent extends React.Component {
            sevaDate = (e) => {
                const { name, password } = this;
                alert(`用户名:${name.value},密码:${password.value}`);
            }
            render() {
                return (
                    <form onSubmit={this.sevaDate}>
                        <input type="text" ref={c => this.name = c}></input>
                        <input type="password" ref={c => this.password = c}></input>
                        <button type="submit">提交</button>
                    </form>
                );
            }
        };
        root.render(<MyComponent />);

    </script>
</body>

</html>

受控组件

类似于vue中的数据双向绑定

复制代码
<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8" />
    <title>react中的受控组件与非受控组件</title>
    <script src="https://unpkg.com/react@18/umd/react.development.js"></script>
    <script src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
    <script src="https://unpkg.com/@babel/standalone@7/babel.min.js"></script>
    <script src="https://unpkg.com/prop-types@15.8.1/prop-types.js"></script>
</head>

<body>
    <div id="root"></div>

    <script type="text/babel">
        const root = ReactDOM.createRoot(document.getElementById('root'));
        class MyComponent extends React.Component {
            state = {
                name: '',
                password: ''
            }
            sevaDate = (e) => {
                e.preventDefault();// 阻止表单提交的默认行为
                alert(`用户名:${this.name},密码:${this.password}`);
            }
            sevaName = (e) => {
                this.name = e.target.value; // 将输入框的值赋值给state中的name
            }
            sevaPassword = (e) => {
                this.password = e.target.value; // 将输入框的值赋值给state中的password
            }
            render() {
                return (
                    <form onSubmit={this.sevaDate}>
                        <input type="text" onChange={this.sevaName}></input>
                        <input type="password" onChange={this.sevaPassword}></input>
                        <button type="submit">提交</button>
                    </form>
                );
            }
        };
        root.render(<MyComponent />);

    </script>
</body>

</html>

总结

尽量少写非受控组件因为受控组件里一个ref都没有(官方建议少用ref)

相关推荐
lyx_20164 分钟前
PDF文档导出分页功能实现
react.js·typescript·pdf·react
一 乐8 分钟前
海产品销售系统|海鲜商城购物|基于SprinBoot+vue的海鲜商城系统(源码+数据库+文档)
java·前端·javascript·数据库·vue.js·后端
艾小码8 分钟前
还在死磕模板语法?Vue渲染函数+JSX让你开发效率翻倍!
前端·javascript·vue.js
炒毛豆9 分钟前
vue3 + antd + print-js 实现打印功能(含输出PDF)
前端·javascript·vue.js
天天向上102410 分钟前
el-table动态添加行,删除行
前端·javascript·vue.js
小王码农记1 小时前
vue2中实现天气预报
前端·javascript·vue.js·echarts
我命由我123451 小时前
Element Plus 组件库 - Select 选择器 value 为 index 时的一些问题
开发语言·前端·javascript·vue.js·html·ecmascript·js
有趣的野鸭2 小时前
JAVA课程十一次实验课程主要知识点示例
java·前端·数据库
格鸰爱童话2 小时前
next.js(二)——从react到next.js
前端·javascript·react.js
西洼工作室6 小时前
项目环境变量配置全攻略
前端