电子商务网站建设的方法有哪些,专业团队表情包张伟,dedecms 如何关闭网站,网站定制合同和模版的区别一、认识受控组件 在React中#xff0c;HTML表单的处理方式和普通的DOM元素不太一样#xff1a;表单元素通常会保存在一些内部的state。 比如下面的HTML表单元素#xff1a;
这个处理方式是DOM默认处理HTML表单的行为#xff0c;在用户点击提交时会提交到某个服务器中HTML表单的处理方式和普通的DOM元素不太一样表单元素通常会保存在一些内部的state。 比如下面的HTML表单元素
这个处理方式是DOM默认处理HTML表单的行为在用户点击提交时会提交到某个服务器中并且刷新页面在React中并没有禁止这个行为它依然是有效的但是通常情况下会使用JavaScript函数来方便的处理表单提交同时还可以访问用户填写的表单数据实现这种效果的标准方式是使用“受控组件” 二、受控组件练习
HTML 中表单元素如input、 textarea 和 select之类的表单元素通常自己维护 state并根据用户输入进行更新。
而在 React 中可变状态mutable state通常保存在组件的 state 属性中并且只能通过使用 setState()来更新。
我们将两者结合起来使React的state成为“唯一数据源”渲染表单的 React 组件还控制着用户输入过程中表单发生的操作被 React 以这种方式控制取值的表单输入元素就叫做“受控组件”
由于在表单元素上设置了 value 属性因此显示的值将始终为this.state.value这使得 React 的 state 成为唯一数据源。
由于 handleUsernameChange 在每次按键时都会执行并更新 React 的 state因此显示的值将随着用户输入而更新。 三、受控组件的其他练习
textarea标签
texteare标签和input比较相似
select标签
select标签的使用也非常简单只是它不需要通过selected属性来控制哪一个被选中它可以匹配state的value来选中。
处理多个输入
多处理方式可以像单处理方式那样进行操作但是需要多个监听方法
import React, { PureComponent } from react;
import PropTypes from prop-types;class App extends PureComponent {constructor(props) {super(props);this.state {username: ,password: ,validCode: ,};}render() {return (divform onSubmit{(e) this.handleSubmit(e)}divlabel htmlForusername用户{/* 受控组件 */}inputtypetextidusernameonChange{(e) this.handleUsernameChange(e)}value{this.state.username}//label/divdivlabel htmlForpassword密码{/* 受控组件 */}inputtypetextidpasswordonChange{(e) this.handlePasswordChange(e)}value{this.state.password}//label/divdivlabel htmlForvalidCode验证码{/* 受控组件 */}inputtypetextidvalidCodeonChange{(e) this.handleValidCodeChange(e)}value{this.state.validCode}//label/divinput typesubmit value提交 //form/div);}handleSubmit(e) {e.preventDefault();const { username, password, validCode } this.state;console.log(username, password, validCode);}handleUsernameChange(e) {console.log(e.target.value);this.setState({username: e.target.value,});}handlePasswordChange(e) {console.log(e.target.value);this.setState({password: e.target.value,});}handleValidCodeChange(e) {console.log(e.target.value);this.setState({validCode: e.target.value,});}
}App.propTypes {};export default App;
这里我们可以使用ES6的一个语法计算属性名Computed property names
import React, { PureComponent } from react;
import PropTypes from prop-types;class App extends PureComponent {constructor(props) {super(props);this.state {username: ,password: ,validCode: ,};}render() {return (divform onSubmit{(e) this.handleSubmit(e)}divlabel htmlForusername用户{/* 受控组件 */}inputtypetextnameusernameidusernameonChange{(e) this.handleChange(e)}value{this.state.username}//label/divdivlabel htmlForpassword密码{/* 受控组件 */}inputtypetextnamepasswordidpasswordonChange{(e) this.handleChange(e)}value{this.state.password}//label/divdivlabel htmlForvalidCode验证码{/* 受控组件 */}inputtypetextnamevalidCodeidvalidCodeonChange{(e) this.handleChange(e)}value{this.state.validCode}//label/divinput typesubmit value提交 //form/div);}handleSubmit(e) {e.preventDefault();const { username, password, validCode } this.state;console.log(username, password, validCode);}handleChange(e) {console.log(e.target.name);this.setState({[e.target.name]: e.target.value})}/* handleUsernameChange(e) {console.log(e.target.value);this.setState({username: e.target.value,});}handlePasswordChange(e) {console.log(e.target.value);this.setState({password: e.target.value,});}handleValidCodeChange(e) {console.log(e.target.value);this.setState({validCode: e.target.value,});} */
}App.propTypes {};export default App; 四、非受控组件
React推荐大多数情况下使用 受控组件 来处理表单数据
一个受控组件中表单数据是由 React 组件来管理的另一种替代方案是使用非受控组件这时表单数据将交由 DOM 节点来处理
如果要使用非受控组件中的数据那么我们需要使用 ref 来从DOM节点中获取表单数据。 我们来进行一个简单的演练
使用ref来获取input元素 在非受控组件中通常使用defaultValue来设置默认值
同样input typecheckbox 和 input typeradio支持 defaultCheckedselect 和 textarea支 持 defaultValue。