当前位置: 首页 > wzjs >正文

什么是网站开发与建设seo关键词排名优化教程

什么是网站开发与建设,seo关键词排名优化教程,本溪 网站建设 做网站,淘客网站代理文章目录 1 react表单组件1.1 受控组件 (Controlled Components)示例代码: 1.2 非受控组件 (Uncontrolled Components)示例代码: 2 AntD表单组件实战2.1 开发搜索功能2.2 开发注册页2.3 开发登录页2.4 表单组件校验 结语 1 react表单组件 input表单组件…

文章目录

    • 1 react表单组件
      • 1.1 受控组件 (Controlled Components)
        • 示例代码:
      • 1.2 非受控组件 (Uncontrolled Components)
        • 示例代码:
    • 2 AntD表单组件实战
      • 2.1 开发搜索功能
      • 2.2 开发注册页
      • 2.3 开发登录页
      • 2.4 表单组件校验
    • 结语

1 react表单组件

input表单组件

import { ChangeEvent, useState } from "react";function App() {const [text, setText] = useState<string>("hello");function handleChange(e: ChangeEvent<HTMLInputElement>) {setText(e.target.value);}return (<><p>APP</p><div><input value={text} onChange={handleChange} /></div>);
}export default App;

1.1 受控组件 (Controlled Components)

通过 React 的 stateonChange 事件动态管理表单输入的值,表单数据由 React 组件控制。

示例代码:
import React, { useState } from 'react';function ControlledForm() {const [formData, setFormData] = useState({username: '',email: '',password: ''});const handleChange = (e) => {const { name, value } = e.target;setFormData(prev => ({...prev,[name]: value}));};const handleSubmit = (e) => {e.preventDefault();console.log('提交数据:', formData);// 发送到 API 或进一步处理};return (<form onSubmit={handleSubmit}><inputtype="text"name="username"value={formData.username}onChange={handleChange}placeholder="用户名"/><inputtype="email"name="email"value={formData.email}onChange={handleChange}placeholder="邮箱"/><inputtype="password"name="password"value={formData.password}onChange={handleChange}placeholder="密码"/><button type="submit">提交</button></form>);
}

1.2 非受控组件 (Uncontrolled Components)

使用 ref 直接访问 DOM 元素的值,适用于简单场景或需要手动操作 DOM 的情况。

示例代码:
import React, { useRef } from 'react';function UncontrolledForm() {const usernameRef = useRef();const emailRef = useRef();const passwordRef = useRef();const handleSubmit = (e) => {e.preventDefault();const data = {username: usernameRef.current.value,email: emailRef.current.value,password: passwordRef.current.value};console.log('提交数据:', data);};return (<form onSubmit={handleSubmit}><input type="text" ref={usernameRef} placeholder="用户名" /><input type="email" ref={emailRef} placeholder="邮箱" /><input type="password" ref={passwordRef} placeholder="密码" /><button type="submit">提交</button></form>);
}

2 AntD表单组件实战

2.1 开发搜索功能

基础ListSearch.tsx代码如下:

import { FC, useState } from "react";
import type { ChangeEvent } from "react";
import { Input } from "antd";const { Search } = Input;const ListSearch: FC = () => {const [value, setValue] = useState("");function handleChange(e: ChangeEvent<HTMLInputElement>) {setValue(e.target.value);}function handleSearch(value: string) {console.log(value);}return (<Searchsize="large"allowClearplaceholder="输入关键字"value={value}onChange={handleChange}onSearch={handleSearch}style={{ width: "60%" }}/>);
};export default ListSearch;

效果如下图所示:

在这里插入图片描述

搜索之后,如果刷新页面,我们希望展示内容和刷新之前一样,需要我们把搜索“参数值”放入URL,改造之后的代码如下:

import { FC, useEffect, useState } from "react";
import type { ChangeEvent } from "react";
import { useNavigate, useLocation, useSearchParams } from "react-router-dom";
import { Input } from "antd";import { LIST_SEARCH_PARAM_KEY } from "../constant";const { Search } = Input;const ListSearch: FC = () => {const nav = useNavigate();const { pathname } = useLocation();const [value, setValue] = useState("");function handleChange(e: ChangeEvent<HTMLInputElement>) {setValue(e.target.value);}// 获取url参数,并设置input valueconst [searchParams] = useSearchParams();useEffect(() => {const curVal = searchParams.get(LIST_SEARCH_PARAM_KEY) || "";setValue(curVal);}, [searchParams]);function handleSearch(value: string) {nav({pathname,search: `${LIST_SEARCH_PARAM_KEY}=${value}`,});}return (<Searchsize="large"allowClearplaceholder="输入关键字"value={value}onChange={handleChange}onSearch={handleSearch}style={{ width: "60%" }}/>);
};export default ListSearch;

效果如下图所示:

在这里插入图片描述

2.2 开发注册页

Register.tsx基础代码如下:

import { FC } from "react";
import { Link } from "react-router-dom";
import { Typography, Space, Form, Input, Button } from "antd";
import { UserAddOutlined } from "@ant-design/icons";import { LOGIN_PATHNAME } from "../router";import styles from "./Register.module.scss";const { Title } = Typography;const Register: FC = () => {function onFinish(values: any) {// todo 注册apiconsole.log(values);}return (<div className={styles.container}><div><Space><Title level={2}><UserAddOutlined /></Title><Title level={2}>注册新用户</Title></Space></div><div><FormlabelCol={{ span: 6 }}wrapperCol={{ span: 16 }}onFinish={onFinish}><Form.Item label="用户名" name="username"><Input /></Form.Item><Form.Item label="密码" name="password"><Input.Password /></Form.Item><Form.Item label="确认密码" name="confirm"><Input.Password /></Form.Item><Form.Item label="昵称" name="nickname"><Input /></Form.Item><Form.Item wrapperCol={{ offset: 6, span: 16 }}><Space><Button type="primary" htmlType="submit">注册</Button><Link to={LOGIN_PATHNAME}>已有账户,登录</Link></Space></Form.Item></Form></div></div>);
};
export default Register;

带完善功能:

  • 样式优化
  • 表单校验,比如用户名特殊字符校验,密码安全校验,确认密码一致校验等

2.3 开发登录页

页面和注册相似,表单组件变少,Login.tsx代码如下:

import { FC, useEffect } from "react";
import { Link } from "react-router-dom";
import { Typography, Space, Form, Input, Button, Checkbox } from "antd";
import { UserAddOutlined } from "@ant-design/icons";import { REGISTER_PATHNAME } from "../router";import styles from "./Register.module.scss";
import Password from "antd/es/input/Password";const { Title } = Typography;const USERNAME_KEY = "usename";
const PASSWORD_KEY = "password";/*** 浏览器本地存储用户信息* @param username 用户名* @param password 密码*/
function rememberUser(username: string, password: string) {localStorage.setItem(USERNAME_KEY, username);localStorage.setItem(PASSWORD_KEY, password);
}/*** 浏览器本地删除用户信息* @param username 用户名* @param password 密码*/
function deleteUserFromStorage(username: string, password: string) {localStorage.removeItem(USERNAME_KEY);localStorage.removeItem(PASSWORD_KEY);
}/*** 浏览器本地获取用户信息*/
function getUserInfoFromStorage() {return {username: localStorage.getItem(USERNAME_KEY),password: localStorage.getItem(PASSWORD_KEY),};
}const Login: FC = () => {// 表单组件初始化const [form] = Form.useForm();useEffect(() => {const { username, password } = getUserInfoFromStorage();form.setFieldsValue({ username, password });}, []);function onFinish(values: any) {// todo 注册apiconsole.log(values);const { username, password, remember } = values || {};if (remember) {rememberUser(username, password);} else {deleteUserFromStorage(username, password);}}return (<div className={styles.container}><div><Space><Title level={2}><UserAddOutlined /></Title><Title level={2}>用户登录</Title></Space></div><div><FormlabelCol={{ span: 6 }}wrapperCol={{ span: 16 }}onFinish={onFinish}initialValues={{ remember: true }}form={form}><Form.Item label="用户名" name="username"><Input /></Form.Item><Form.Item label="密码" name="password"><Input.Password /></Form.Item><Form.ItemwrapperCol={{ offset: 6, span: 16 }}name="remember"valuePropName="checked"><Checkbox>记住我</Checkbox></Form.Item><Form.Item wrapperCol={{ offset: 6, span: 16 }}><Space><Button type="primary" htmlType="submit">登录</Button><Link to={REGISTER_PATHNAME}>注册新用户</Link></Space></Form.Item></Form></div></div>);
};
export default Login;

解析:

  • Form.useForm():antd提供的第三方hooks
  • LocalStorage:浏览器本地存储对象
  • 记住我:勾选“记住我”,存储用户信息;不勾选,清理存储的用户信息;页面初始化时,回显用户信息

2.4 表单组件校验

antd表单校验详细参考下面链接1,这里以注册页表单校验为例,演示常见校验规则配置,Register.tsx代码如下:

...const Register: FC = () => {
...return (<div className={styles.container}>...<div><FormlabelCol={{ span: 6 }}wrapperCol={{ span: 16 }}onFinish={onFinish}><Form.Itemlabel="用户名"name="username"rules={[{ required: true, message: "请输入用户名" },{type: "string",min: 5,max: 20,message: "字符长度再5-20之间",},{pattern: /^\w$/,message: "只能是字母数字下划线",},]}><Input /></Form.Item><Form.Itemlabel="密码"name="password"rules={[{ required: true, message: "请输入用户名" },{min: 8,message: "密码长度最少8位",},]}><Input.Password /></Form.Item><Form.Itemlabel="确认密码"name="confirm"dependencies={["password"]}rules={[{required: true,message: "请输入确认密码",},({ getFieldValue }) => ({validator(_, value) {if (!value || getFieldValue("password") === value) {return Promise.resolve();} else {return Promise.reject(new Error("两次密码不一致"));}},}),]}><Input.Password /></Form.Item>...</Form></div></div>);
};
export default Register;

效果如下图所示:在这里插入图片描述

结语

❓QQ:806797785

⭐️仓库地址:https://gitee.com/gaogzhen

⭐️仓库地址:https://github.com/gaogzhen

[1]ant design 官网[CP/OL].

http://www.dtcms.com/wzjs/510671.html

相关文章:

  • 网站主页用ps做seo百度网站排名软件
  • 做庭院景观的那个网站推广好优化设计七年级下册数学答案
  • 政府网站建设责任杭州网站优化企业
  • 想再算命网站上登广告怎么做莆田百度快照优化
  • 做编程网站广州网站优化服务商
  • 平面设计网上自学搜索引擎优化大致包含哪些内容或环节
  • 网站项目策划书模板上海网络推广营销策划方案
  • 建筑企业网站模板微商软文范例
  • 购书网站开发的意义灰色行业关键词推广
  • 销售网站排名网站运营培训
  • 戚墅堰做网站价格百度网盘app免费下载安装老版本
  • dw做旅游网站教程广州网页seo排名
  • 档案局网站的建设百度搜索流量查询
  • 机械类毕业设计代做网站推荐百度软件商店
  • 网站开发发帖语言免费发布信息网站大全
  • 做网站空间500m多少钱视频号视频下载助手app
  • 供应链管理师报考条件天津seo诊断技术
  • 如何在vps上建设网站seo站群优化
  • 手机app开发网站模板下载互动营销的方式有哪些
  • 珠海医疗网站建设海外推广解决方案
  • 婚纱摄影网站设计毕业论文seo网站优化工具大全
  • 十堰企业网站制作公司谷歌google下载
  • 手机怎样翻墙上外国网说到很多seo人员都转行了
  • 有名的网站武汉网站seo
  • whois 查询系统seo搜索引擎优化业务
  • 校园门户网站系统建设关键技术惠州seo收费
  • 域名备案管理系统查询上海优化外包公司排名
  • 机械厂网站建设深圳seo教程
  • 昆明网站建设搭建爱站网络挖掘词
  • 青岛网站推广引流免费引流推广工具