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

React 实现 Step组件

简介

        这篇文章将会实现步骤条组件功能。

       步骤条具有以下几个特点

        1、将浏览器url与Step组件绑定,做到浏览器刷新,不会重定向到第一个Step

        2、通过LocalStorage 存储之前的Step填充的内容,做到刷新网页不丢失数据。

实现

 Step.jsx (组件)

import {BrowserRouter, Routes, Route,NavLink} from "react-router-dom";
import {useEffect, useState} from "react";
export const Step = ({name, data})=>{const submit = (event)=>{event.preventDefault();// 从local storage获取所有数据const local =  localStorage.getItem(name);console.log(JSON.parse(local))// 向后端请求...}const [current, setCurrent] = useState(0);useEffect(()=>{// 处理浏览器刷新情况,重新设置currentlet paths = window.location.pathname.split('/');setCurrent(parseInt(paths[paths.length - 1]));},[])return (// react router<BrowserRouter>// STEP 表单组件<form className={'Step'} onSubmit={submit}>// 头部导航<div className={'Step-Header'}><div>{// 使用navlink跳转data.map((item, idx) =>{return <NavLink onClick ={ ()=> setCurrent(idx)} to= {`/step/${idx}`} style={{paddingRight:30}}>{item.name + ((idx === current) ? '√':'')}</NavLink>;})}</div></div>// 内容,使用react router,做到局部刷新<div className={'Step-Content'}><Routes>{data.map((item,idx) =>{return  <Route path = {`/step/${idx}`}  element = {data[idx].content}/>})}</Routes></div>// 底部表单跳转,使用 navlink跳转<div className={'Step-Footer'}>{current > 0 && <NavLink  onClick ={ ()=> setCurrent(current-1)}  to ={`/step/${current - 1}`}>pre</NavLink>}{current + 1 < data.length && <NavLink   conClick ={ ()=> setCurrent(current+1)}   to ={`/step/${current + 1}`}>next</NavLink>}{current === data.length - 1 && <button type="submit">提交</button>}</div></form></BrowserRouter>);
}

app.jsx (使用)

const App = ()=> {const stepName = 'Demo';// demo Step 1const Step1 = ()=>{const [username, setUsername] = useState('');useEffect(()=>{const local = localStorage.getItem(stepName);if (local && JSON.parse(local).username){setUsername(JSON.parse(local).username);}},[])const change = (event)=>{setUsername(event.target.value);// 向local storage中写入值localStorage.setItem(stepName, JSON.stringify({username: event.target.value}));}return <><label htmlFor='username'>用戶名:</label><input type={'text'}  value={username} onChange={change}/></>;}const steps = [{name: "步驟1",content: <Step1/>},{name: "步驟2",content: (<span>2号</span>)}]return <Step  data={steps} name={stepName} />
}export  default Appexport default App;

相关文章:

  • 少儿编程 中国电子学会图形化编程2022年3月等级考试Scratch二级真题解析(选择题、判断题)
  • 一个可以用于生产环境得PHP上传函数
  • YoloV5改进策略:基于频域多轴表示学习模块|全网首发|高效涨点|代码注释详解
  • 基于多反应堆的高并发服务器【C/C++/Reactor】(中)子线程 WorkerThread的实现 和 线程池ThreadPool的初始化
  • Wnmp本地部署结合内网穿透实现任意浏览器远程访问本地服务
  • 银行十大主题域
  • MySQL之视图案例
  • ASP.NET可视化流程设计器源码
  • FPGA时序分析与时序约束(三)——I/O接口约束
  • 数脉观察二丨 详解CroPoolv2.0锁仓收益机制 文末附锁仓教程
  • 软件测试|测试平台开发-Flask 入门:编写第一个简单 Web 应用
  • 华为OD机试 - 寻找最优的路测线路(Java JS Python C)
  • 谈谈我的三次考研经历
  • 网络流总结
  • HNU-数据库系统-实验3-数据库设计
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • 【Linux系统编程】快速查找errno错误码信息
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • Java基本数据类型之Number
  • Laravel核心解读--Facades
  • Rancher-k8s加速安装文档
  • Travix是如何部署应用程序到Kubernetes上的
  • 构造函数(constructor)与原型链(prototype)关系
  • 开源SQL-on-Hadoop系统一览
  • 理解在java “”i=i++;”所发生的事情
  • 深入 Nginx 之配置篇
  • 一起参Ember.js讨论、问答社区。
  • gunicorn工作原理
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • ​iOS安全加固方法及实现
  • (Oracle)SQL优化技巧(一):分页查询
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • (转)Windows2003安全设置/维护
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • ***原理与防范
  • .NET Core 和 .NET Framework 中的 MEF2
  • .NET/C# 使窗口永不获得焦点
  • .NetCore实践篇:分布式监控Zipkin持久化之殇
  • .net访问oracle数据库性能问题
  • .net开源工作流引擎ccflow表单数据返回值Pop分组模式和表格模式对比
  • [ vulhub漏洞复现篇 ] ThinkPHP 5.0.23-Rce
  • [BZOJ]4817: [Sdoi2017]树点涂色
  • [Head First设计模式]策略模式
  • [KMP求最小循环节][HDU1358][Period]
  • [MTK]安卓8 ADB执行ota升级
  • [PyQt] Pycharm 配置 PyQt 开发环境
  • [python]用python获取EXCEL文件内容并保存到DBC
  • [pytorch入门] 6. 神经网络
  • [RN] React Native 常用命令行
  • [Share]商务web应用程序的界面设计
  • [SUCTF 2019]CheckIn1