含义
受控组件:由state来决定表单内部的数据,由表单的事件处理函数来更改state的方式
class App extends React . Component { state = { name: '' } handleChange = ( e) => { this . setState ( { name: e. target. value} , ( ) => { console . log ( '修改name' , this . state. name) } ) } render ( ) { const { name } = this . statereturn ( < div> < p> 用户名:< / p> < input type = "text" value= { name} onChange= { this . handleChange} / > < / div> ) }
}
ReactDOM. render ( < App / > , document. getElementById ( 'app' )
const lanConf = [ { label: '粤语' , value: 'Cantonese' } , { label: '菲律宾语' , value: 'Tagalog' } , { label: '英语' , value: 'English' } , { label: '闽南语' , value: 'Fukienese' } , ]
class App extends React . Component { state = { name: 'Stephy' , psw: '' , intro: '' , gender: 'female' , isStu: true , languages: [ 'Cantonese' , 'Tagalog' , 'English' ] } handleChange = ( e) => { this . setState ( { [ e. target. name] : e. target. value} , ( ) => { console . log ( ` 修改 ${ e. target. name} ` , this . state[ e. target. name] ) } ) } handleRadioChange = ( value, e) => { this . setState ( { [ e. target. name] : value} , ( ) => { console . log ( ` 修改radio ` , this . state[ e. target. name] ) } ) } handleCheckboxChange = ( e) => { const name = e. target. name, value = e. target. value, list = JSON . parse ( JSON . stringify ( this . state[ name] ) ) ; let setList = [ ] if ( list. includes ( value) ) { setList = list. filter ( val => val != value) } else { setList = [ ... new Set ( [ ... this . state[ name] , value] ) ] } this . setState ( { [ name] : setList} , ( ) => { console . log ( ` 修改checkbox ` , this . state[ e. target. name] ) } ) } submit = ( e) => { e. preventDefault ( ) console . log ( '提交' , this . state) } render ( ) { const { name, psw, intro, gender, isStu, languages } = this . statereturn ( < div> < form> < div> < span> 用户名:< / span> < input type = "text" value= { name} name= "name" onChange= { this . handleChange} placeholder= "用户名" / > < / div> < div> < span> 密码:< / span> < input type = "password" value= { psw} name= "psw" onChange= { this . handleChange} placeholder= "密码" / > < / div> < div> < span> 性别:< / span> < select name= "gender" value= { gender} onChange= { this . handleChange} > < option value= "female" > 女< / option> < option value= "male" > 男< / option> < / select> < / div> < div> { } 是否学生:是 < input type = "radio" name= "isStu" checked= { isStu} onChange= { this . handleRadioChange . bind ( this , true ) } / > | 否 < input type = "radio" name= "isStu" checked= { ! isStu} onChange= { this . handleRadioChange . bind ( this , false ) } / > < / div> < div> { lanConf. map ( ( { label, value } , index) => { return ( < span key= { index} > { label} : < inputtype = "checkbox" name= "languages" checked= { languages. includes ( value) } value= { value} onChange= { this . handleCheckboxChange} / > { lanConf. length - 1 != index ? "|" : "" } < / span> ) } ) } < / div> < div> < textareavalue= { intro} name= "intro" onChange= { this . handleChange} placeholder= "说明" / > < / div> < div> < button onClick= { this . submit} > 提交< / button> < / div> < / form> < / div > ) }
}
ReactDOM. render ( < App / > , document. getElementById ( 'app' )
)