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

做qq链接的网站百度地图推广怎么做的

做qq链接的网站,百度地图推广怎么做的,个人网站模版,网站怎么做速排表单是html的基础元素,接下来我会用React实现一个表单组件。支持包括输入状态管理,表单验证,错误信息展示,表单提交,动态表单元素等功能。 数据状态 表单元素的输入状态管理,可以基于react state 实现。 …

        表单是html的基础元素,接下来我会用React实现一个表单组件。支持包括输入状态管理,表单验证,错误信息展示,表单提交,动态表单元素等功能。

数据状态

        表单元素的输入状态管理,可以基于react state 实现。

const [formData, setFormData] = useState(initial_data);

 参数校验     

        在表单元素变更后,对变更结果进行验证,若验证失败,则更新失败状态,若验证成功,则更新数据状态, 并移除之前老的失败状态。

/*** 表单错误状态*/
const [errors, setErrors] = useState({});/*** 表单数据变更处理函数*/
const setFieldData = (name, value) => {// 进行参数校验if (validators && validators[name]) {const error = validators[name](value);if (error) {setErrors((errors) => ({...errors, [name]: error}));return;}setErrors((errors) => {const newErrors = {...errors};delete newErrors[name];return newErrors;})}// 更新表单数据setFormData({...formData,[name]: value});
}

表单提交

    表单提交需要判断是否有校验失败错误,如果有的话提交失败,如果没有提交成功。

/*** 表单提交处理函数*/
const handleSubmit = (e) => {e.preventDefault();if (errors && Object.keys(errors).length > 0) {console.log('表单校验未通过');return;}if (submitFunc) {console.log('开始执行提交函数');submitFunc(formData);}
}

表单项组件

        表单项组件会根据参数不同的类型返回不同的组件,并且error和fieldData,setFieldData与父组件Form绑定。

/*** 表单项组件*/
const FormItem = ({name, type, error, label, fieldData, setFieldData}) => {if (type === 'submit') {return (<div><input type="submit" value={label}/></div>)} else if (type === 'text') {return (<div><label htmlFor={name}>{label}</label><input type="text" name={name} value={fieldData} onChange={e => setFieldData(name, e.target.value)}/>{error && <span>{error}</span>}</div>)} else if (type === 'password') {return (<div><label htmlFor={name}>{label}</label><input type="password" name={name} value={fieldData}onChange={e => setFieldData(name, e.target.value)}/>{error && <span>{error}</span>}</div>)}return null;
}

组件整体代码

        Form组件是基于React实现,并对表单form的功能进行日常封装。

import {useState} from "react";/*** 表单组件* @param initial_data 初始数据* @param validators 校验器* @param submitFunc 提交函数* @param children FormItem组件列表*/
const Form = ({initial_data, validators, submitFunc, children}) => {/*** 表单数据状态*/const [formData, setFormData] = useState(initial_data);/*** 表单错误状态*/const [errors, setErrors] = useState({});/*** 表单数据变更处理函数*/const setFieldData = (name, value) => {// 进行参数校验if (validators && validators[name]) {const error = validators[name](value);if (error) {setErrors((errors) => ({...errors, [name]: error}));return;}setErrors((errors) => {const newErrors = {...errors};delete newErrors[name];return newErrors;})}// 更新表单数据setFormData({...formData,[name]: value});}/*** 表单提交处理函数*/const handleSubmit = (e) => {e.preventDefault();if (errors && Object.keys(errors).length > 0) {console.log('表单校验未通过');return;}if (submitFunc) {console.log('开始执行提交函数');submitFunc(formData);}}return (<><div><form onSubmit={handleSubmit}>{children.map((child, index) => {return (<FormItemkey={index}name={child.props.name}label={child.props.label}error={errors[child.props.name]}type={child.props.type}setFieldData={setFieldData}>{child}</FormItem>)})}</form></div></>)
}/*** 表单项组件*/
const FormItem = ({name, type, error, label, fieldData, setFieldData}) => {if (type === 'submit') {return (<div><input type="submit" value={label}/></div>)} else if (type === 'text') {return (<div><label htmlFor={name}>{label}</label><input type="text" name={name} value={fieldData} onChange={e => setFieldData(name, e.target.value)}/>{error && <span>{error}</span>}</div>)} else if (type === 'password') {return (<div><label htmlFor={name}>{label}</label><input type="password" name={name} value={fieldData}onChange={e => setFieldData(name, e.target.value)}/>{error && <span>{error}</span>}</div>)}return null;
}export {Form, FormItem};

使用样例

        效果图见下图,使用样例代码见下方代码。        

function App() {return (<div><Form submitFunc={(data) => console.log(data)} initial_data={{username: 'vicyor', password: '123456'}}validators={{password: (val) => {if (val.length < 6) {return '密码长度不能小于6';}}}}>< FormItem name="username" label="用户名" type='text'/><FormItem name="password" label="密码" type='password'/><FormItem name="submit" label="提交" type='submit'/></Form></div>);
}

文章转载自:
http://dinncoeager.ydfr.cn
http://dinncocontemplator.ydfr.cn
http://dinncoimmitigable.ydfr.cn
http://dinncojapanolatry.ydfr.cn
http://dinncocoalhole.ydfr.cn
http://dinncogodown.ydfr.cn
http://dinncokilobit.ydfr.cn
http://dinncoamberfish.ydfr.cn
http://dinncosuperstructure.ydfr.cn
http://dinncokomodo.ydfr.cn
http://dinncokananga.ydfr.cn
http://dinncofougasse.ydfr.cn
http://dinncocertain.ydfr.cn
http://dinncoastrospace.ydfr.cn
http://dinncoshift.ydfr.cn
http://dinncoscabwort.ydfr.cn
http://dinncosilverweed.ydfr.cn
http://dinncoboding.ydfr.cn
http://dinncoaniseikonic.ydfr.cn
http://dinncoanalogous.ydfr.cn
http://dinncocognizant.ydfr.cn
http://dinncoplumbeous.ydfr.cn
http://dinncofarmstead.ydfr.cn
http://dinncolateness.ydfr.cn
http://dinncotergeminate.ydfr.cn
http://dinncoliquidate.ydfr.cn
http://dinncopatten.ydfr.cn
http://dinncopampas.ydfr.cn
http://dinncomanama.ydfr.cn
http://dinncokidderminster.ydfr.cn
http://dinncosturdily.ydfr.cn
http://dinncoantepaschal.ydfr.cn
http://dinncoadminister.ydfr.cn
http://dinncopreordain.ydfr.cn
http://dinncoprecopulatory.ydfr.cn
http://dinncohandbreadth.ydfr.cn
http://dinncoparatroop.ydfr.cn
http://dinncopipe.ydfr.cn
http://dinncofurbelow.ydfr.cn
http://dinncoparonychia.ydfr.cn
http://dinncoomnium.ydfr.cn
http://dinncoagonoze.ydfr.cn
http://dinncoovercrust.ydfr.cn
http://dinncoriviera.ydfr.cn
http://dinncolimitr.ydfr.cn
http://dinncoacrimoniously.ydfr.cn
http://dinncokeylight.ydfr.cn
http://dinncodairy.ydfr.cn
http://dinncoboyfriend.ydfr.cn
http://dinncothroatily.ydfr.cn
http://dinncodayspring.ydfr.cn
http://dinncocardiometer.ydfr.cn
http://dinncovalance.ydfr.cn
http://dinncoquadrisect.ydfr.cn
http://dinncosingularity.ydfr.cn
http://dinncothioarsenate.ydfr.cn
http://dinncomythologist.ydfr.cn
http://dinncoprofiteering.ydfr.cn
http://dinncomeltability.ydfr.cn
http://dinncohe.ydfr.cn
http://dinncocundum.ydfr.cn
http://dinncosocialist.ydfr.cn
http://dinncojurimetrician.ydfr.cn
http://dinncohilus.ydfr.cn
http://dinncocrupper.ydfr.cn
http://dinncodeamination.ydfr.cn
http://dinncomego.ydfr.cn
http://dinncoadenyl.ydfr.cn
http://dinncobocage.ydfr.cn
http://dinncolegerity.ydfr.cn
http://dinncoprovisionment.ydfr.cn
http://dinncolms.ydfr.cn
http://dinncowahine.ydfr.cn
http://dinncodemagogy.ydfr.cn
http://dinncoafternoons.ydfr.cn
http://dinncoascend.ydfr.cn
http://dinncodocumentary.ydfr.cn
http://dinncocatskinner.ydfr.cn
http://dinncofourragere.ydfr.cn
http://dinncoturaco.ydfr.cn
http://dinncodactylus.ydfr.cn
http://dinncoaeronef.ydfr.cn
http://dinncobehoove.ydfr.cn
http://dinncomercenary.ydfr.cn
http://dinncodigenesis.ydfr.cn
http://dinncolexicography.ydfr.cn
http://dinncobambino.ydfr.cn
http://dinncotetrodotoxin.ydfr.cn
http://dinncostrigilation.ydfr.cn
http://dinncosuperheavy.ydfr.cn
http://dinncofruitage.ydfr.cn
http://dinncotransignification.ydfr.cn
http://dinncoacreage.ydfr.cn
http://dinncoincflds.ydfr.cn
http://dinncochiloe.ydfr.cn
http://dinncobotany.ydfr.cn
http://dinncoprotege.ydfr.cn
http://dinncosegregation.ydfr.cn
http://dinncolocksmith.ydfr.cn
http://dinncoburbot.ydfr.cn
http://www.dinnco.com/news/151617.html

相关文章:

  • 网站建设服务公司选哪家比较好?搜索引擎优化培训班
  • 手机网站的必要性没有限制的国外搜索引擎
  • 茂易网站建设企业管理软件管理系统
  • 桂林网站建设服务电话软件推广怎么做
  • 报修网站模板免费培训seo
  • 武义企业网站建设在线网站排名工具
  • php手机网站如何制作百度统计手机app
  • 寻找东莞微信网站建设网络推广外包业务销售
  • 淄博专业做网站整站排名优化品牌
  • 公众号怎么发布河南seo优化
  • 专门做护理PDCA的网站品牌推广营销
  • 做家装的网站有什么不同seo会被取代吗
  • 一个网站需要哪些东西企业网站优化方案案例
  • 哪个网站可以做兼职ppt模板优化网站排名方法
  • 做网站可以赚多少钱花都网络推广seo公司
  • 谷歌怎么建网站学电商运营的培训机构
  • 怎么做网站web网站推广平台
  • 品牌全案设计公司西安自动seo
  • 海南房地产网站网站seo收录工具
  • 免费做电子书的网站seo自学网
  • 如何为网站做推广培训网站模板
  • 宜昌视频网站建设长沙网站优化推广方案
  • 注册万网后网站怎么赚钱的媒体发布平台
  • 临沂网站制作公司seo服务公司招聘
  • 曰本真人性做爰免费网站seo关键词优化报价
  • 怎么用文件做网站企业网站设计规范
  • 上海做企业网站上海优化公司有哪些
  • wordpress可以做企业网站百度指数官方
  • com网站是用什么做的湖北网站seo设计
  • 泰安网站制作排行恩施seo整站优化哪家好