• React+AntdUi实现《好客租房系统》登陆验证06


    一、分为三个部分,顶部导航、表单和底部文字,顶部表单已经封装好,而底部文字是固定的

     表单使用formilk组件实现,而表单验证使用withFormik组件验证

    <div className={styles.root}>
            {/* 顶部导航 */}
            <NavBar mode="light">
              账号登录
            </NavBar>
            <WhiteSpace size="xl" />
    
            {/* 登录表单 */}
            <WingBlank>
              <form onSubmit={handleSubmit}>
                <div className={styles.formItem}>
                  <input
                    className={styles.input}
                    name="username"
                    value={values.username}
                    onChange={handleChange}
                    placeholder="请输入账号"
                  />
                </div>
                {/* 长度为5到8位,只能出现数字、字母、下划线 */}
                {errors.username && <div className={styles.error}>{errors.username}</div>}
                <div className={styles.formItem}>
                  <input
                    className={styles.input}
                    name="password"
                    type="password"
                    value={values.password}
                    onChange={handleChange}
                    placeholder="请输入密码"
                  />
                </div>
                {/* 长度为5到12位,只能出现数字、字母、下划线 */}
                {errors.password && <div className={styles.error}>{errors.password}</div>}
                <div className={styles.formSubmit}>
                  <button className={styles.submit} type="submit">
                    登 录
                  </button>
                </div>
              </form>
              <Flex className={styles.backHome}>
                <Flex.Item>
                  <Link to="/registe">还没有账号,去注册~</Link>
                </Flex.Item>
              </Flex>
            </WingBlank>
          </div>
        )
    

      

    export default withFormik({
      // 提供表单的状态数据和当前表单的input的name属性值一一对应
      mapPropsToValues: () => ({ username: 'test2', password: 'test2' }),
      // 验证表单
      validationSchema: yup.object().shape({
        username: yup.string().required('账号为必填项!').matches(REG_UNAME, '账号长度为5到8位,只能出现数字、字母、下划线'),
        password: yup.string().required('密码为必填项!').matches(REG_PWD, '密码长度为5到12位,只能出现数字、字母、下划线'),
      }),
      // 处理表单提交
      // handleSubmit: (values: Values, formikBag: FormikBag) => void | Promise<any>
      handleSubmit: async (values, formikBag) => {
        console.log(formikBag)
        const { username, password } = values;
        console.log(username, password)
        let data = {
          username,
          password
        }
        let res = await login(data);
        console.log(res)
        if (res.status === 200) {
          setToken(res.data.token);
          const { history, location: { state } } = formikBag.props;
          if (state && state.backUrl) {
            history.replace(state.backUrl)
          } else {
            history.go(-1)
          }
        } else {
          Toast.offline(res.description)
        }
      },
    })(Login)
    

      

  • 相关阅读:
    <c:if></c:if>用法-转载
    Windows下配置Apache服务器
    ScrureCRT访问CentOS时出现乱码的解决办法
    Windows平台下Git服务器搭建
    Group_Concat函数示例
    Mysql Federated Server 示例
    MySQL几个特别语法示例
    MySQL事件调度器
    Disruptor Java版和.NET版的区别
    委托的三种实现方式
  • 原文地址:https://www.cnblogs.com/wmlcn/p/15083092.html
Copyright © 2020-2023  润新知