第十章 React操作表单

来源:互联网 发布:ps cs6 mac破解版 编辑:程序博客网 时间:2024/05/17 04:08


在这章里,开始学习React中如何操作表单。

一、一个简单的实例

本例中设置输入框 inputvalue = {this.state.data},当在输入框值发生变化时,可以使用onChange 事件来监听 input的变化,并修改 state,状态值的改变即刻渲染到页面上。

<!DOCTYPEhtml>

<html>

 <head>

   <metacharset="UTF-8"/>

   <title>React中的表单操作</title>

   <scriptsrc="js/react.min.js"></script>

   <scriptsrc="js/react-dom.min.js"></script>

   <scripttype="text/javascript"src="js/browser.min.js"></script>

   <scripttype="text/javascript"src="js/jquery-2.1.0.min.js"></script>

 </head>

 <body>

   <divid="hello"></div>

       <scripttype="text/babel">

  var HelloForm = React.createClass({

 getInitialState: function() {

   return {username: 'afeng',userpwd:'afeng2'}

         

 },

 handleChange: function(e) {

   this.setState({username: e.target.value});

 },

 handlePwdChange: function(e) {

   this.setState({userpwd: e.target.value});

 },

 render: function() {

   var username = this.state.username;

    var userpwd = this.state.userpwd;

   return <div>

<inputtype="text"value={username}onChange={this.handleChange} />

<br/>

     <inputtype="password"value={userpwd}onChange={this.handlePwdChange} />

           <h4>{username}</h4>

           <h4>{userpwd}</h4>

          </div>;

 }

});

ReactDOM.render(

 <HelloForm/>,

 document.getElementById('hello')

);

   </script>

 </body>

</html>

二、综合案例

从上面的例子可知,一个input要对应handleChange方法,显然不合适的,下面的例子合成一个函数处理。

 <!DOCTYPEhtml>

<html>

<head>

   <metacharset="UTF-8">

   <title>表单详解</title>

</head>

 <scriptsrc="js/react.min.js"></script>

   <scriptsrc="js/react-dom.min.js"></script>

   <scripttype="text/javascript"src="js/browser.min.js"></script>

<body>

<divid="reactDemo"></div>

   <scripttype="text/babel">

 var ReactForm = React.createClass({

   getInitialState:function(){

       return {

           username:'ReactDemo',

           gender:'man',

           checked:true

       };

   },

   handleChange:function(event){

       var newState={};

       newState[event.target.name]=event.target.name=="checked"?event.target.checked:event.target.value;

       this.setState(newState);

   },

   submitHandler:function (e) {

      

       console.log(this.state);

   },

   render:function () {

       return <formonSubmit={this.submitHandler} action=""method="get">

           <labelhtmlFor="username">请输入用户名</label>

           <inputtype="text"name="username"onChange={this.handleChange}value={this.state.username}id="username"/>

           <br/>

           <selectname="gender"onChange={this.handleChange}value={this.state.gender}>

               <optionvalue="man"></option>

               <optionvalue="woman"></option>

           </select>

           <br/>

           <labelhtmlFor="checkbox">全选</label>

           <inputtype="checkbox"value="全选"checked={this.state.checked}onChange={this.handleChange}name="checked"id="checkbox"/>

           <buttontype="submit">提交</button>

       </form>

   }

});

ReactDOM.render(<ReactForm/>,document.getElementById('reactDemo'));

</script>

</body>

</html>

需要注意的是,在submitHandler中,如果加入如下代码,则不会提交数据。

e.preventDefault();

 

1 0
原创粉丝点击