zoukankan      html  css  js  c++  java
  • 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)
    

      

  • 相关阅读:
    互联网预言大神:凯文·凯利——预测未来的12个趋势
    仅有算法远远不够:AI突破下一站,需要对硬件重新审视
    软件开发中经常使用的5种设计模式
    强化学习到底是什么,它如何运作?
    2020年网络安全的六大经验教训
    选择困难终结者:不同问题之下的机器学习算法
    为什么物联网如此重要?
    Pku3080 Blue Jeans
    pku1734 Musical Theme
    [Usaco2006 Dec]Milk Patterns
  • 原文地址:https://www.cnblogs.com/wmlcn/p/15083092.html
Copyright © 2011-2022 走看看