日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

09 受控组件

發布時間:2023/12/10 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 09 受控组件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

含義

  • 受控組件:由state來決定表單內部的數據,由表單的事件處理函數來更改state的方式
class App extends React.Component {// 1. state是表單的唯一數據源state = {name: ''}handleChange = (e) => {// 2. 控制表單操作并同步statethis.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 {// 1. state是表單的唯一數據源state = {name: 'Stephy',psw: '',intro: '',gender: 'female',isStu: true,languages: ['Cantonese', 'Tagalog', 'English']}handleChange = (e) => {// 2. 控制表單操作并同步statethis.setState({[e.target.name]: e.target.value}, () => {console.log(`修改${e.target.name}`, this.state[e.target.name])})}handleRadioChange = (value, e) => {// 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])]}// 以上也可以這么判斷 根據e.target.checked來判斷勾選、反選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>{/* radio設置同樣的name 才可變為單選 */}是否學生:是 <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') )

總結

以上是生活随笔為你收集整理的09 受控组件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。