前言:最近在學習Redux+react+Router+Nodejs全棧開發高級課程,這裏對實踐過程做個記錄,方便本身和你們翻閱。最終成果github地址:https://github.com/66Web/react-antd-zhaoping,歡迎star。javascript
1、項目概述css
2、需求分析前端
3、React開發環境java
npm install -g create-react-app
create-react-app my-project
npm start
npm install redux --save
npm run eject
4、ES6經常使用語法react
5、AntD-Mobile組件庫 webpack
npm install antd-mobile --save //或使用yarn更塊 yarn add antd-mobile --save
import {Button} from 'antd-mobile' import 'antd-mobile/dist/antd-mobile.css' //所有加載
yarn add babel-plugin-import --save
"plugins":[ ["import", { "libraryName": "antd-mobile", "style": "css" }] // `style: true` 會加載 less 文件 ]
npm run eject
6、先後端聯調ios
axios:簡潔好用的發送請求庫git
npm install axios --save
"proxy":"http://localhost:9093" //全部端口都轉換到9093
import axios from 'axios' constructor(props){ super(props) this.state = { data: {} } } componentDidMount(){ axios.get('/data') .then(res => { if(res.status == 200){ this.setState({data: res.data}) } //console.log(res) }) } <h2>個人名字是{this.state.data.user}</h2>
import axios from 'axios' const USER_DATA = 'USER_DATA' const initState = { user: '李雲龍', age: 20 } export function auth(state=initState,action){ switch(action.type){ case USER_DATA: return {...state, ...action.payload} default: return state } } //獲取異步數據:axios.get,post發送請求,返回promise對象;Redux裏獲取數據,而後dispatch便可 export function getUserdata(){ //dispatch用來通知數據修改 return dispatch => { axios.get('/data') .then(res => { if(res.status == 200){ dispatch(userData(res.data) } //console.log(res) }) } } export function userData(data){ return {type:USER_DATA, payload:data} }
Auth.js中:渲染頁面github
import {connect} from 'react-redux'
import {getUserData} from './Auth.redux'
componentDidMount(){
this.props.getUserData()
}
<h2>個人名字是{this.props.user},年齡{this.props.age}</h2>
Auth = connect()(Auth)
export default Auth;
config.js中:專門配置axios,Axios.interceptors設置攔截器,好比全局的loadingweb
import axios from 'axios' import {Toast} from 'antd-mobile' //輕提示 //攔截請求 axios.interceptors.request.use(function(config){ Toast.loading('加載中',0) return config }) //攔截響應 axios.interceptors.response.use(function(config){ Toast.hide() return config })
index.js中:應用axios和antd配置
import './config' import 'antd-mobile/dist/antd-mobile.css'
7、項目環境搭建
yarn add antd-mobile babel-plugin-import axios express、 mongoose react-redux redux redux-thunk redux-devtools-extension cookie-parser --save
yarn add babel-plugin-transform-decorators-legacy --save-dev
配置
"babel": { "presets": [ "react-app" ], "plugins": [ [ "import", { "libraryName": "antd-mobile", "style": "css" } ], ["@babel/plugin-proposal-decorators", { "legacy": true } ] ] }, "proxy":"http://localhost:9093"
reducer.js:合併全部reducer的文件
//合併全部reducer,而且返回 import {combineReducers} from 'redux' export default combineReducers({}) //暫無reducer
注:項目來自慕課網