1. 程式人生 > 其它 >react 結合gitte 建立專案(詳情步驟)

react 結合gitte 建立專案(詳情步驟)

​
建立專案第一步 基本搭建
在建立之前,需要有一個git 倉庫,我們要把專案搭建到git 中
目錄介紹

    cd 到某個盤
    mkdir workspace 建立workspace資料夾
    cd workspace 進入workspace資料夾
    workspace一般為我們倉庫和專案總目錄
        git@1 倉庫一(前端自己專案,如果自己是前端leader)
            www.bdplus.cn 為上線資料夾
                pc或w 為 pc 電腦端專案
                h5或m  為h5 網頁或app 中網頁或公眾號
                minstore 小程式(如果分微信和支付寶可wminstore tminstore)
                app 前端app 使用者開發
                mkdown (一些備註檔案)
            以下為正常開發專案,以上為對應上線打包後文件
            w
            h5
            minstore
            app
            mkdown
            如果有其他方式可自己組織

        git@2 倉庫二 (其他專案比如後端等)
        git@3 倉庫三

Cmd

Copy

檢視node 版本
node -v
或
使用nvm 進行node 版本安裝與切換

1、node 版本
nvm use v14
    Now using node v14.15.3 (npm v6.14.9)
node -v
    v14.15.3
為了保證同步,選擇node 版本14
2、開始建立專案
npx create-react-app my-app
    官方標準命令,my-app 為專案名稱
    npx create-react-app scss-route-mobx
....
3、git倉庫提交
這塊你要進行git 提交  主要在企業做專案就應該放到倉庫中,如果企業沒有,那自己也要弄個倉庫,哪天在家改個東西,或像今年的疫情在家辦公所以,只要遠端倉庫有程式碼,電腦就是另一個事了。
4、cd scss-route-mobx  進入專案目錄
    先進入到這個專案目錄
5、yarn eject  開啟配置檔案
    這時候先不著急啟專案,先把配置檔案開啟就是webpack 這些基礎配置開啟
6、yarn start   啟動專案
    這時候你再起專案。 算是勉強建立了一個專案


Cmd

Copy

建立專案第二步 sass安裝

1、sass 安裝
yarn add node-sass-chokidar
yarn add npm-run-all
2、修改package.json
"scripts": {
        "build-css": "node-sass-chokidar src/ -o src/",
        "watch-css": "npm run build-css && node-sass-chokidar src/ -o src/ --watch --recursive  --use-polling --polling-interval 1000",
        "start-js": "node scripts/start.js",
        "start": "npm-run-all -p watch-css start-js",
        "build-js": "node scripts/build.js",
        "build": "npm-run-all build-css build-js",
        "test": "node scripts/test.js --env=jsdom"
},

Cmd

Copy

建立專案第三步 yarn build 打包注意事項

新建一個.env檔案與package.json 同在根目錄下
GENERATE_SOURCEMAP=false
以下三種路徑
PUBLIC_URL=https://www.a.com/
PUBLIC_URL=./
PUBLIC_URL=/

JSON

Copy

啟動成功並編譯成功表示react專案建立成功
至此 一個基本的react 專案算是建立成功了

建立專案第四步 設定代理、nginx 路由配置、跨域處理

src/setupProxy.js 建立檔案
yarn add http-proxy-middleware axios
const { createProxyMiddleware } = require('http-proxy-middleware');
module.exports = function(app) {
    app.use(
      '/home',createProxyMiddleware({
        target: 'https://#####.com/',
        changeOrigin: true,
      })
    );
    app.use(
      '/wp-json',createProxyMiddleware({
        target: 'https://#####.cn/',
        changeOrigin: true,
      })
    );
};


以下是具體某個頁面中使用
obj = {
mediareports:{
                page_number:'2',
                page_size:'10'
            }
}
const cfg = this.state.mediareports;
this.getApi('/home/mediareports',cfg,{}).then((res)=>{
    console.log(res.data)
})
this.getApi('/wp-json/wp/v2/posts',{},{}).then((res)=>{
    console.log(res.data)
})

async getApi(url,cfg,headers){
    let data = await axios.get(url,{params:cfg},
                               {
        headers: headers
    })
    return data;
}




React JSX

Copy

建立專案第五步 react react-router 路由

react 的檔案目錄是怎麼樣
1、pubilc
    - index.html
    - favicon.ico
    - manifest.json
        移動App的配置檔案,用於指定應用的顯示名稱、圖示、入口頁面等資訊.
2、src
    - components
        - alert
            index.jsx
        - footer
            index.jsx
        - nav
            index.jsx
        比如:
        導航、彈出層、loading載入動畫、分頁器等
    - images
        凡事頁面中<img src>標籤使用的圖片
    - js
        頁面中編寫的js功能及開發檔案
    - store
        mobx
        context
    - styles
        img/
        css、less、scss
    - unit
        js一些元件
        比如,
            如果不用jq,自己封裝一些js 的方法
            如果手機端有活動頁面都需要下載app,同的app 的判斷
            如果有彈出去js等
    - view
        home
            index.jsx
        about
            index.jsx
        joined
            index.jsx
            list.jsx
            other.jsx
    - other

HTML

Copy

1、匯入包
yarn add react-router-dom;

PS:
react-router 和 react-router-dom

react-router: 實現了路由的核心功能。
react-router-dom: 基於react-router,加入了在瀏覽器執行環境下的一些功能。

react-router-dom 是 react-router 的加強版唄

因為 React Native 也要路由系統呀。所以還有一個庫叫 react-router-native,這個庫也是基於 react-router 的,它類似 react-router-dom,加入了 React Native 執行環境下的一些功能。


react-router-dom
react-router-native

React BrowserRouter和HashRouter的區別

BrowserRouter:h5路由(history API)
HashRouter:雜湊路由

主要區別

BrowserRouter 和 HashRouter 都可以實現前端路由的功能

BrowserRouter 實現的是單頁面的路由切換
HashRouter 實現的是全域性路由切換

從原理上

HashRouter在路徑中包含了#,相當於HTML的錨點定位。(# 符號的英文叫hash,所以叫HashRouter,和雜湊沒關係哦))

而BrowserRouter使用的是HTML5的新特性History,沒有HashRouter(錨點定位)那樣通用,低版本瀏覽器可能不支援。

從用法上

BrowserRouter進行元件跳轉時可以傳遞任意引數實現元件間的通訊,而HashRouter不能(除非手動拼接URL字串),因此一般配合Redux或mobx使用,實現元件間的資料通訊。



Cmd

Copy

2、新增加Router.js檔案

import React from 'react';

import { BrowserRouter, HashRouter, Route, Link, Switch } from 'react-router-dom';

import App from './App.js';

const Router = () => (
    <BrowserRouter>
        <App/>
    </BrowserRouter>
)
export default Router;
JavaScript

Copy

3、修改index.js

原App 換成

import Router from './Router';

<Router />
JavaScript

Copy

4、App.js(需增加程式碼分割)

import React , { Component, Suspense, lazy } from 'react';
import { withRouter,NavLink,Switch,Redirect,Route} from 'react-router-dom';

const Home = lazy(() => import('./views/Home'));
import Input from './view/input';
import Event from './view/event';

class App extends Component {
    render(){
        return (
            <Suspense fallback={<div>Loading...</div>}>
            <Switch>
                <Route exact path="/" component={Home} />
                <Route path="/input" component={Input} />
                <Route path="/event" component={Event} />
            </Switch>
            </Suspense>
        );
    }
}
export default App;
JavaScript

Copy

5、新增頁面

./view/home/index.jsx
./view/input/index.jsx
./view/event/index.jsx
內容自定義

import { withRouter,NavLink,Switch,Redirect,Route} from 'react-router-dom';

<NavLink to="/">首頁</NavLink>
<NavLink to="/input">表單</NavLink>
<NavLink to="/event">事件</NavLink>
React JSX

Copy

import React , { Component } from 'react';
import { withRouter,NavLink,Switch,Redirect,Route} from 'react-router-dom';
class View extends Component {
    render(){
        return (
            <React.Fragment>
                <div className="mian">這是首頁面</div>
                <NavLink to="/">首頁</NavLink><br/>
                <NavLink to="/input">表單</NavLink><br/>
                <NavLink to="/event">事件</NavLink>
            </React.Fragment>
        )
    }
}
export default View;
React JSX

Copy

建立專案第六步 Redux

1、安裝yarn add react-redux redux
2、router store 注入

import {Provider} from 'react-redux';
<Provider stores={store}>
    <App/>
</Provider>

完整程式碼
import React from 'react';

import { BrowserRouter, HashRouter} from 'react-router-dom';

import App from './App.js';


import {Provider} from 'react-redux';
import Store from './store/store.js';

const Router = () => (
    <BrowserRouter>
        <Provider store={Store}>
            <App/>
        </Provider>
    </BrowserRouter>
)
export default Router;


React JSX

Copy

3、建立整個專案 store.js
src/store/store.js

import {createStore, combineReducers} from 'redux';

import {reducer as addReducer} from './views/action/_index.js';


const reducer = combineReducers({
    add:addReducer,
    // remove:removeReducer,
    // edit:editReducer,
})

export default createStore(reducer);


----
我需要建立 Store.js
引入 多個 reducer (store資料片段)

combineReducers 合併整合多個reducer

再進行 createStore()
第一引數 reducer (純函式,返回新的state)
第二個引數 state 初始化值 null
第三個 中介軟體

到這個位置
router 基本不需要再修改了
store 只需引入 所需 view下的頁面中的reducer

createStore

React JSX

Copy

第四步

關於每個view 頁面
views
home
每個頁面都需要一個state
state 如何生成 Reducer(返回新的state)

    action
        物件 return{}
        type 每個action 名稱
    ActionTypes
    reducer
        根據具體的action 名稱(type對應)
        來編寫或計算返回新的state
        [...new,..state]
        Object.assign()
    以上是具體當前view 頁面內部以外的redux
    jsx
about
    每個頁面都需要一個state
news
    每個頁面都需要一個state
usercenter
    每個頁面都需要一個state
React JSX

Copy

第五步

​

如何與頁面互動
匯入
import {connect} from ‘react-redux’;

匯出
export default connect(mapStateToProps,mapDispatchToProps)(View);

function mapStateToProps(state) {
return {
isList:state.add
}
}

state.add
add 是哪來的 就是我們Store.js
自定義的reducer
const reducer = combineReducers({
add:addReducer,
// remove:removeReducer,
// edit:editReducer,
})

isList
當前元件 this.props 可以接受到
const {onAddFn,isList,onRemoveFn} = this.props;

輕鬆的拿到對應 reducer 返回的 State

怎麼操作 action

//是一個函式,會得到dispatch和ownProps(容器元件的props物件)兩個引數。
const mapDispatchToProps = (dispatch, ownProps) => {
// const {id} = ownProps;
return {
onAddFn: () => dispatch(AddTodo(‘add’))
}
};
onAddFn: () => dispatch(AddTodo(‘add’))

dispatch 操作action

onAddFn 通過this.props 來使用
onClick = {onAddFn}
onAddFn 為自定義 在當前view 頁面使用

  本章CSDN地址:https://mp.csdn.net/mp_blog/creation/editor/117437129

注:商業用途 禁止轉載