React Project: Step11 Auth

新建Auth界面

类似checkourder的表单;
对input的value和state进行双向绑定;
且加入有效检查‘

import React,{
   Component} from 'react';
import Input from '../../components/UI/Input/Input';
import Button from '../../components/UI/Button/Button';
import classes from './Auth.css';
class Auth extends Component{
   
    state={
   
        controls:{
   
            email: {
   
                elementType:'input',
                elementConfig:{
   
                    type:'email',
                    placeholder:'Mail Address'
                },
                value:'',
                validation:{
   
                    required:true,
                    isEmail:true
                },
                valid:false,
                touched:false
            },
            password: {
   
                elementType:'input',
                elementConfig:{
   
                    type:'password',
                    placeholder:'Password'
                },
                value:'',
                validation:{
   
                    required:true,
                    minLength:6
                },
                valid:false,
                touched:false
            }
        }
    }

    checkValidity(value, rules){
   
        let isValid= true;
        if(rules.required&&isValid){
   
            isValid= value.trim()!=='';   //.trim()可以可以防止空格
        }

        if(rules.minLength&&isValid){
   
            isValid= value.length>=rules.minLength;
        }

        if(rules.maxLength&&isValid){
   
            isValid= value.length<=rules.maxLength;
        };

        return isValid;
    };


    inputChangedHandler = (event, controlName)=>{
   
        const updatedControls = {
   
            ...this.state.controls,
            [controlName]:{
   
                ...this.state.controls[controlName],
                value:event.target.value,
                //使用检查函数
                valid:this.checkValidity(event.target.value, this.state.controls[controlName].validation),
                touched:true   //标记为输入过
            }
        };
        this.setState({
   controls:updatedControls});
    }


    render(){
   
        const formElementArray = [];
        for(let key in this.state.controls){
        //遍历每个name
            formElementArray.push({
   
                id:key,
                config:this.state.controls[key]
            });
        };

        const form = formElementArray.map(formElement=>(
            <Input 
                key={
   formElement.id}
                elementType={
   formElement.config.elementType} 
                elementConfig={
   formElement.config.elementConfig} 
                value={
   formElement.config.value}
                changed={
   (event)=>this.inputChangedHandler(event,formElement.id)}
                invalid={
   !formElement.config.valid}
                shouldValidate={
   formElement.config.validation&& formElement.config.touched}
            />
        ));

        return(
            <div className={
   classes.Auth}>
                <form>
                    {
   form}
                    <Button btnType="Success">SUBMIT</Button>
                </form>
            </div>
        );
    };
};

export default Auth;

在这里插入图片描述
在navigtaion中加入此component——link;

import React from 'react';

import classes from './NavigationItems.css';
import NavigationItem from './NavigationItem/NavigationItem';

const navigationItems = () => (
    <ul className={
   classes.NavigationItems}>
        <NavigationItem link="/" exact>Burger Builder</NavigationItem>
        <NavigationItem link="/orders">Orders</NavigationItem>
        <NavigationItem link="/auth">Authenticate</NavigationItem>
    </ul>
);

export default navigationItems;

在app.js中加入此route;

import React, {
    Component } from 'react';
import {
   Route, Switch} from 'react-router-dom';
import Layout from './hoc/Layout/Layout';
import BurgerBuilder from './containers/BurgerBuilder/BurgerBuilder';
import Checkout from './containers/Checkout/Ch
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值