Reactjs、redux的從入門到放棄、刪庫跑路示例

曾想仗劍走天涯 bug多沒去了,Hello,我是@IT·平頭哥聯盟code首席填坑官/code——蘇南,梅斌的專欄

個人react入門到放棄之路

最近看到不少react相關的問題跟討論,愈來愈多的小夥伴喜歡這個框架了,前端

同時也在看到了有些入門的小夥伴遇到了各類各樣的問題,本人也是react框架使用都一枚,node

公司是騰訊、阿里、平安三巨頭合資的一家公司,分別上海、深圳、杭州、北京、廣州等多個分部,前端人員也有近100人,react

框架也在統一往react靠齊,本人也在實際項目中應用了蠻長一段時間,跟社區的不少新夥伴同樣,入坑的過程當中,遇到過各類各樣的問題,webpack

這裏就不一一詳細吐槽了,吐下去,大家估計要罵我瘋了,重點就講講咱們項目的一些整個框架結構吧,git

由於不少小夥伴在入門後,上手作項目時,都會苦腦於項目結構如何構建,便於後期維護、項目迭代等等的問題;es6

地址github項目示例地址 ,若是以爲不錯,對你有幫助記得幫 轉發 和 star哦,感謝您的支持。github

項目結構示例:

本文由@IT·平頭哥聯盟-首席填坑官(蘇南)分享

本文由@IT·平頭哥聯盟-首席填坑官(蘇南)分享

本文由@IT·平頭哥聯盟-首席填坑官(蘇南)分享

本文由@IT·平頭哥聯盟-首席填坑官(蘇南)分享

本文由@IT·平頭哥聯盟-首席填坑官(蘇南)分享

能夠掃碼預覽哦web

上面是項目的大致結構,有興趣的小夥伴,能夠進入項目詳細看看,chrome

一、首先咱們會分不一樣的環境,寫不一樣的配置文件,便於結構清晰,維護修改;
二、全部的項目組件都放在pages裏,pages裏再按項目模塊去劃分項目結構,actions、reducers內也是如何,共用的組件放在components內,

路由文件也是按項目模塊來劃分,不要所有放在一個文件內,找起來特別不方便,也不容易維護,express

四、後面統一引入在一個入口文件內,對外輸出,

五、實現了按需加載,共用代碼提取,

六、該項目主要用到了
react、react-router、redux、redux-thunk、es六、babel、webpack、node、express、fetch等

七、特別說明,window.devToolsExtension是redux的一個調試工具,在chrome瀏覽器應用商店搜索redux後按裝,開發環境就能看到redux狀態的每一步變化了,便於調試提升開發效率;

八、固然還有其餘的,就不一一說明了,可進入項目細看,

165fbe41841a2490?w=2048&h=444&f=png&s=107817

/server/config.js

var dev = require('./env/dev'),
    test = require('./env/test'),
    pre = require('./env/pre'),
    prd = require('./env/prd');

var defaults = {
  root: path.normalize(__dirname + '/..')
};

module.exports = {
  dev: extend(dev, defaults),
  test: extend(test, defaults),
  pre: extend(pre, defaults),
  prd: extend(prd, defaults)
}[process.env.DEPLOY_ENV || 'dev']; //DEPLOY_ENV 爲 node服務端環境變量
路由文件也是按項目模塊來劃分
/src/pages/route.js
import React from 'react';
import ReactDOM from 'react-dom';
import {Provider} from "react-redux";
import useBasename from 'history/lib/useBasename';
import { hashHistory, browserHistory, Router } from 'react-router';
import Store from "src/store";
import bridge from 'src/utils/bridge'

const rootRoute = {
  path: '/',
  component: require('../components/app/App'),
  childRoutes: [
    require('./Home/route'),//引入不一樣模塊的路由
    require('./Intro/route'),
    require('./Handler/route'),
    require('./Setting/route'),
    {
      path: '*',
      getComponent(location, cb) {
        require.ensure([], (require) => {
          cb(null, require('./NotFoundPage'));
        });
      },
      onEnter: () => bridge.doAction('setTitle', { title: '出錯啦' })
      // onEnter: () => bridge.doAction('setWechat')
    }
  ],
  indexRoute:{ onEnter: (nextState, replace) => replace('/home') }, //默認重定向到->首頁
};
import {createStore,applyMiddleware} from "redux";
import thunk from "redux-thunk";
import reducers from "src/reducers";

function configStore (){
    let createStoreWithMiddleware = applyMiddleware(thunk)(createStore);
    //dev環境開啓redux調試
    let store  = createStoreWithMiddleware(reducers,(__DEBUG__ && window.devToolsExtension ? window.devToolsExtension() : undefined));
    return store;
};

export default configStore();

地址:github項目示例地址 ,若是以爲不錯,對你有幫助記得幫 轉發 和 star哦,感謝您的支持。

想更詳細的瞭解我?還有更多疑惑?請猛戳這裏吧,記得關注咱們的公衆號哦!

寶劍鋒從磨礪出,梅花香自苦寒來,作有溫度的攻城獅,公衆號:honeyBadger8,!本文由@IT·平頭哥聯盟-首席填坑官∙蘇南分享,@IT·平頭哥聯盟 主要分享前端、測試 等領域的積累,文章來源於(本身/羣友)工做中積累的經驗、填過的坑,但願能盡綿薄之力 助其餘同窗少走一些彎路,梅斌的專欄,首席填坑官∙蘇南的專欄,公衆號:honeyBadger8

做者:蘇南 - 首席填坑官
交流羣:912594095,公衆號: honeyBadger8
本文原創,著做權歸做者全部。商業轉載請聯繫 @IT·平頭哥聯盟得到受權,非商業轉載請註明原連接及出處。
相關文章
相關標籤/搜索