//首先简单介绍受控组件,每个都要去change事件触发

import React from 'react'

class Form extends React.Component {
    constructor(props) {
        super(props);
        this.state = { 
            username:'',
            selectValue:'',
            content:''
        }
    }
    render() { 
        return (
            <div style={{padding:"10px"}}>
                <form onSubmit={this.handleSubmit}>
                    <section style={{marginBottom:"10px"}}>
                        <label htmlFor="username">姓名:</label>
                        <input type="text" id="username" value={this.state.username} 
onChange={this.changeHandle} /> </section> <section style={{marginBottom:"10px"}}> <label>水果:</label> <select value={this.state.selectValue} onChange={this.selectChange}> <option value="grapefruit">葡萄柚</option> <option value="lime">酸橙</option> <option value="coconut">椰子</option> <option value="mango">芒果</option> </select> </section> <section style={{marginBottom:"10px"}}> <label style={{verticalAlign:"top"}}>内容:</label> <textarea value={this.state.content} onChange={this.contentChange} /> </section> <input type="submit" value="提交"/> </form> </div> ); } handleSubmit=(e)=>{ e.preventDefault(); console.log(this.state.username); console.log(this.state.selectValue); console.log(this.state.content) console.log(e); } changeHandle=(e)=>{ //用户名 e.persist(); this.setState({ username:e.target.value }) } selectChange=(e)=>{ //水果 e.persist(); this.setState({ selectValue:e.target.value }) } contentChange=(e)=>{ e.persist();//这个是浏览器报错提示说加的,如果需要异步访问事件属性,应在事件上调用 event.persist()
,这种操作将从事件池中删除 SyncthesicEvent,并允许用户代码保留对事件的引用。
//内容 this.setState({ content:e.target.value }) } } export default Form;

//非受控组件

import React from 'react'
class NameForm extends React.Component {
    constructor(props) {
      super(props);
      this.username = React.createRef();
      this.password = React.createRef();
    }
    render() {
      return (
        <form onSubmit={this.handleSubmit}>
          <label>
            Name:
            <input type="text" ref={this.username} />
          </label>
          <label>
            password:
            <input type="text" ref={this.password} />
          </label>
          <input type="submit" value="Submit" />
        </form>
      );
    }
    handleSubmit=(event)=>{
        event.preventDefault();
        console.log(this.username.current.value)
        console.log(this.password.current.value)
    }
    
}

export default NameForm;

 

posted on 2020-05-31 22:26  执候  阅读(180)  评论(0编辑  收藏  举报