React + TypeScript 搭建多Tab页脚手架

栏目: 服务器 · 发布时间: 5年前

内容简介:React + Typescript 开发的后端多页脚手架关于这个脚手架项目:由于代码比较简单,注释全面,同时使用了 TypeScript,新手拿来上手和参考,也是不错的。

React + Typescript 开发的后端多页脚手架

React + TypeScript 搭建多Tab页脚手架

前言

关于这个脚手架项目:

  1. 为了公司多个产品模块能够统一,这样维护起来比较轻松
  2. 公司产品的上一个版本用 layui 开发,有 Tab 多页(所以...)
  3. 为了和市面上大众UI区分开(虽然可以用 Antd,然后覆盖样式,个人不喜欢),内置了需要的组件和部分特色功能
  4. 内置皮肤(与内置组件结合),继承原来产品的意志
  5. 顺便整理一下,拿出来骗星, GitHub地址

由于代码比较简单,注释全面,同时使用了 TypeScript,新手拿来上手和参考,也是不错的。

如果发现不妥之处,麻烦道友 issues 指出。

如何使用?

git clone https://github.com/Itroads/react-admin-ts-starter.git

cd react-admin-ts-starter

yarn

yarn start

有哪些特别之处?

  • 多 Tab 页,灵活切换
  • 内置部分组件(其中 Modal 组件,可拖动,范围可设定)
  • 内置皮肤,也可以自定义
  • 可支持,左中右结构,就像 win 上的很多应用那样,当然这是可选项

内置组件说明

Modal

Params 参数说明

参数名称 类型 说明 是否必须
Component Component 弹窗显示的组件内容 必须
options Object width?:string, height?:string, imgSrc:any, title:string 必须
ParentFn Function 父组件传入的方法,如:点击确定,所触发的方法 必须
dataToChildren Any 父组件传递给子组件的值 必须
localDialog Object ref:React.RefObject, tabId:string, addFn:Fn, delFn:Fn。不传则为全局弹窗 可选
import React, { Component } from 'react'
import createModal from '../../components/modal'
import CreatNewRole from './creatNewRole'

class Demo extends Component {
	constructor(props: any) {
	    super(props)
	    this.container = React.createRef();
	}
	
    public container: React.RefObject<HTMLDivElement>;
   
	showNewModal () {
	    createModal(CreatNewRole,{
          width: '650px',
          height: '360px',
          imgSrc: require('../../assets/logo.png'),
          title: '添加角色'
        },this.creatRole, '',{
	      ref: this.container, 
	      tabId: this.props.activeTabId, // 来自 store
	      addFn: this.props.addDialogData, // 来自 store
	      delFn: this.props.deleteDialogData // 来自 store
    	 })
  	}
  	
  	render() {
	  	return (
	  		<div ref={this.container}>
	  		...
	  		</div>
	  	)
  }
}
复制代码

注意:包裹弹出组件的父节点,要设置 position: relative; ,因为遮罩层采用绝对定位。所以,遮罩范围,取决于设置了相对位置的父节点。

弹窗内部的组件,可通过调用 this.props.close() 来关闭弹窗

Alert

Params

一共包含四个子组件: createConfirm createInfo createWarning createError
和一个供外部调用的关闭方法 clearAlert ,直接调用即可 clearAlert()

属性名称 类型 说明 是否必须 范围
msg String 弹窗的文字描述信息 必须 通用
cb Function Confirm 弹窗,点击确定的回调方法 必须 Confirm
import React, { Component } from 'react'
import { createConfirm, createInfo, createWarning, createError, clearAllAlert } from '@components/alert/alert'

class Demo extends Component {

	/**
   * confirm 点击确认按钮的回调
   * @param {any} params 
   */
  confirmCallBack (params) {
    console.log('test', params)
    clearAllAlert()
  }

  showNewConfirm () {
    createConfirm('确定要删除xxx ?', this.confirmCallBack.bind(this, 123))
  }

  showNewInfo () {
    createInfo('确定要删除xxx ?')
  }

  showNewWarning () {
    createWarning('警告信息')
  }

  showNewError () {
    createError('错误信息')
  }
  
  render() {
  	return (
  		...
  	)
  }

}
复制代码

Toast

Params

属性名称 类型 说明 是否必须
text String 弹窗的文字描述信息 必须
time Number Toast 弹窗,指定时间后消失,默认1500毫秒 可选

Demo

import React, { Component } from 'react'
import Modal from '@components/modal/modal'

class Demo extends Component {
	showToast () {
      createToast('账号或密码错误账号或密码错误', 2000)
  	}
  	
  	render() {
	  	return (
	  		...
	  	)
   }
}

复制代码

Menu

Params

属性名称 类型 说明 是否必须
data Array 菜单数据 必须
activeTabId String 当前页面的ID,来自 Store 可选
openOrToggleTabBox Function 左侧菜单导航,处理 tabBox 方法,来自 store 可选
operateCallBack Function 右侧操作菜单回调函数 可选
tabModalCount Number 当前 tab 页的弹窗数量 可选

Demo

左侧菜单

import * as React from 'react'
import { connect } from 'react-redux'
import { addTabBox, setDefaultTab } from '../../reducers/tabBoxReducer'

class Demo extends Component {
	
  	render() {
	  	return (
	  		<Menu 
	  		data={this.state.data} 
	  		activeTabId={this.props.activeTabId} 			openOrToggleTabBox={this.props.addTabBox}
	  		/>	  	
	  	)
   }
}

const mapStateToProps = (state: any) => ({
  activeTabId: state.tabBoxState.activeTabId
})

const mapDispatchToProps = (dispatch: any) => ({
  addTabBox: (tabItem: ITabItem) => dispatch(addTabBox(tabItem)),
  setDefaultTab: (tabItem: ITabItem) => dispatch(setDefaultTab(tabItem))
})

export default connect(mapStateToProps, mapDispatchToProps)(Demo)


复制代码

右侧菜单

import * as React from 'react'
import { connect } from 'react-redux'
import { addDialogData, deleteDialogData } from '../../../../reducers/modalReducer'

class Demo extends Component {
	
  	render() {
	  	return (
	  		<Menu 
	  		data={this.state.rightMenuData} 
	  		operateCallBack={(value: string) => this.menuOperate(value)} 			tabModalCount={this.props.modalState ? 				this.props.modalState[this.props.activeTabId] : null} 
	  		/>	
	  	)
   }
}

const mapStateToProps = (state: any) => ({
  activeTabId: state.adminTabBoxState.activeTabId,
  modalState: state.modalState
})

const mapDispatchToProps = (dispatch: any) => ({
  addDialogData: (key: string) => dispatch(addDialogData(key)),
  deleteDialogData: (key: string) => dispatch(deleteDialogData(key))
})

export default connect(mapStateToProps, mapDispatchToProps)(Demo)


复制代码

你可能存在的疑惑?

皮肤太丑?

打开 /src/utils

-utils
	-skin-files
		-darkBlack.ts // 输出皮肤样式的对象
		-darkBlue.ts
		...
	-skin.ts // 输出全局的,皮肤样式

复制代码

发挥你的设计灵感吧!

哪里控制 Tab 页面?

打开 /src/pages/home/pageBox.tsx 我想,里面的注释,应该足够解释了

如何实现的多Tab页?

核心就是 redux 状态管理,尽在 /src/reducers ,里面的注释可以帮你解惑


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

数字图像处理

数字图像处理

[美]冈萨雷斯、[美]伍兹 / 电子工业出版社 / 2010-1 / 79.80元

《数字图像处理(第3版)(英文版)》是数字图像处理经典著作,作者在对32个国家的134个院校和研究所的教师、学生及自学者进行广泛调查的基础上编写了第三版。除保留了第二版的大部分主要内容外,还根据收集的建议从13个方面进行了修订,新增400多幅图像、200多个图表和80多道习题,同时融入了近年来本科学领域的重要发展,使《数字图像处理(第3版)(英文版)》具有相当的特色与先进性。全书分为12章,包括绪......一起来看看 《数字图像处理》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具