react編寫登錄頁面的兩種方式

登錄頁面可以獲取頁面localStorage的默認值,登錄獲取輸入框的值發(fā)送給后臺,重置清空輸入框的值

1.0 父子通信版本

父組件

import React, { Component } from 'react'
import Field from './components/Field'
import Button from './components/Button'
export default class App extends Component {
    state = {
        username: 'default value' || localStorage.getItem('username'),
        password: ''
    }
    render() {
        return (
            <div>
                <h2>登錄頁面</h2>
                <Field label="用戶名" type="text" onChangeEvent={(value) => { this.setState({ username: value }) }} value={this.state.username} ></Field>
                <Field label="密碼" type="password" onChangeEvent={(value) => { this.setState({ password: value }) }} value={this.state.password}></Field>
                <div style={{ display: 'flex', 'marginLeft': '110px' }}>
                    <Button type="button" value="登錄" event={() => { console.log(this.state.username, this.state.password, '發(fā)送后端驗證'); }} />
                    <Button type="button" value="重置" event={() => {
                        this.setState({ username: '', password: '' })
                    }} />
                </div>
            </div>
        )
    }
}

子組件: 輸入框

import React, { Component } from 'react'
export default class Field extends Component {
  render() {
    return (
        <div style={{display: 'flex',margin: '10px'}}>
            <label style={{width:'100px',display: 'block'}}>{this.props.label}: </label>
            <input style={{ width: '200px', height: '25px', padding: '0px 5px' }} type={this.props.type} onChange={(event) => {
                this.props.onChangeEvent(event.target.value)
            }} value={this.props.value}/>
      </div>
    )
  }
}

子組件: 按鈕

import React, { Component } from 'react'

export default class Button extends Component {
  render() {
    return (
        <div>
            <button style={{cursor:'pointer','marginRight':'20px'}} type={this.props.type} onClick={this.props.event}  >{this.props.value}</button>
      </div>
    )
  }
}

2.0 ref通信版本

父組件

import React, { Component } from 'react'
import Field from './components/Field-5'
import Button from './components/Button'
export default class App extends Component {
    username = React.createRef()
    password = React.createRef()
    render() {
        return (
            <div>
                <h2>登錄頁面</h2>
                <Field label="用戶名" type="text"  ref={this.username} ></Field>
                <Field label="密碼" type="password" ref={this.password}  ></Field>
                <div style={{ display: 'flex', 'marginLeft': '110px' }}>
                    <Button type="button" value="登錄" event={() => { console.log(this.username.current,this.username.current.state.value,this.password.current.state.value) }} />
                    <Button type="button" value="重置" event={() => {
                        this.username.current.clear();
                        this.password.current.clear();
                    }} />
                </div>
            </div>
        )
    }
}

子組件

import React, { Component } from 'react'
export default class Field extends Component {
    state = {
      value:''
    }  
    clear() {
        this.setState({value:''})
    }
  render() {
    return (
        <div style={{display: 'flex',margin: '10px'}}>
            <label style={{width:'100px',display: 'block'}}>{this.props.label}: </label>
            <input style={{ width: '200px', height: '25px', padding: '0px 5px' }} type={this.props.type} onChange={(event) => {
                this.setState({
                    value: event.target.value
                })
            }} value={this.state.value}/>
      </div>
    )
  }
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容