1. 非受控组件
- 所有的输入类型的 dom元素(input textarea 单选 多选)的 值 ,只有在使用的时候才会取值,就是非受控组件;
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>1-非受控组件</title>
</head>
<body>
<div id="root"></div>
<script type="application/javascript" src="../js/react.development.js"></script>
<script type="application/javascript" src="../js/react-dom.development.js"></script>
<script type="application/javascript" src="../js/babel.min.js"></script>
<script type="application/javascript" src="../js/prop-types.js"></script>
<script type="text/babel">
class Login extends React.Component{
username = React.createRef();
password = React.createRef();
handleSubmit = (event)=>{
const username_value = this.username.current.value;
const password_value = this.password.current.value;
console.log(this.username.current);
event.preventDefault();
alert("username="+username_value+" password="+password_value);
}
render(){
return (
<form action="https://www.baidu.com" onSubmit={this.handleSubmit}>
用户名:<input ref={this.username} type="text" name="username"/>
密码:<input ref={this.password} type="text" name="password"/>
<button>登录</button>
</form>
);
}
}
ReactDOM.render(<Login/>, document.getElementById("root"))
</script>
</body>
</html>
2. 受控组件
- 定义:输入类型的DOM(如 input textarea 单选 多选等),随着用户的输入,就能把value值维护到state状态中去,并且在使用这些值的时候可以从state状态中取出来,这种就是受控组件
- 举例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>2-受控组件</title>
</head>
<body>
<div id="root"></div>
<script type="application/javascript" src="../js/react.development.js"></script>
<script type="application/javascript" src="../js/react-dom.development.js"></script>
<script type="application/javascript" src="../js/babel.min.js"></script>
<script type="application/javascript" src="../js/prop-types.js"></script>
<script type="text/babel">
class Login extends React.Component{
state = {
username:"",
password:""
}
handleSubmit = (event)=>{
const {username,password} = this.state;
alert("username="+username+" ,password="+password);
event.preventDefault();
}
getUsername = (event)=>{
this.setState({
username:event.target.value
});
}
getPassword = (event)=>{
this.setState({
password:event.target.value
});
}
render(){
return (
<form action="https://www.baidu.com" onSubmit={this.handleSubmit}>
用户名:<input onChange={this.getUsername} type="text" name="username"/>
密码:<input onChange={this.getPassword} type="text" name="password"/>
<button>登录</button>
</form>
);
}
}
ReactDOM.render(<Login/>, document.getElementById("root"))
</script>
</body>
</html>
- 输出结果如下:
- 页面初始化
- 输入值后
3. 比较受控组件和非受控组件