React + Typescript 開發的後端多頁腳手架 javascript
關於這個腳手架項目:java
因爲代碼比較簡單,註釋全面,同時使用了 TypeScript,新手拿來上手和參考,也是不錯的。react
若是發現不妥之處,麻煩道友 issues
指出。git
git clone https://github.com/Itroads/react-admin-ts-starter.git
github
cd react-admin-ts-starter
redux
yarn
後端
yarn start
bash
參數名稱 | 類型 | 說明 | 是否必須 |
---|---|---|---|
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()
來關閉彈窗框架
一共包含四個子組件: 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 (
...
)
}
}
複製代碼
屬性名稱 | 類型 | 說明 | 是否必須 |
---|---|---|---|
text |
String |
彈窗的文字描述信息 | 必須 |
time |
Number |
Toast 彈窗,指定時間後消失,默認1500毫秒 |
可選 |
import React, { Component } from 'react'
import Modal from '@components/modal/modal'
class Demo extends Component {
showToast () {
createToast('帳號或密碼錯誤帳號或密碼錯誤', 2000)
}
render() {
return (
...
)
}
}
複製代碼
屬性名稱 | 類型 | 說明 | 是否必須 |
---|---|---|---|
data |
Array |
菜單數據 | 必須 |
activeTabId |
String |
當前頁面的ID,來自 Store | 可選 |
openOrToggleTabBox |
Function |
左側菜單導航,處理 tabBox 方法,來自 store | 可選 |
operateCallBack |
Function |
右側操做菜單回調函數 | 可選 |
tabModalCount |
Number |
當前 tab 頁的彈窗數量 | 可選 |
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 // 輸出全局的,皮膚樣式
複製代碼
發揮你的設計靈感吧!
打開 /src/pages/home/pageBox.tsx
我想,裏面的註釋,應該足夠解釋了
核心就是 redux 狀態管理,盡在 /src/reducers
,裏面的註釋能夠幫你解惑
技術的道路老是崎嶇,前行的路上得到了不少幫助,雖然我很眇小,但接受的幫助也會銘記。
爝神
方少
衆'狼友'
以及衆多,在我問出小白的問題時,同樣認真幫助解答的人。
特別報道: 爝神的 Node 框架 Daruk 震撼登場!
每一個成長起來的人,都是曾經的小白,雖然我不是 真·大佬
,但也但願,新人在求知的路上可以不被嘲笑,可以獲得真誠的幫助。
能夠加個人 WX ,一塊兒學習探討。
Itroad