项目地址:https://github.com/Nealyang/R...I想等项目做完了再连载一系列的博客,随着开发,确实遇到了很多坑,也请教了很多人。然后我想,为什么不在记录陷阱的同时分享收获。分享固然好,但如果能集思广益岂不更美。我们的口号是:坚决不做不完。本博客将为连载代码博客同步更新博客。以后随着项目的发展,可能会遇到之前写的不合适的地方,回去修改。如有不妥之处~欢迎兄弟们指教。谢谢!react-redux配置说明reducer首先我们在project/app/reducers下新建一个index.js用来导出所有reducer。也用于汇总admin、front等reducer文件。最后combineReducers后直接export。exportdefaultcombineReducers({front,globalState:reducer,admin})以上admin、reducer、front是其他文件中的reducer处理。这里我们可以暂时导出一个空状态。每个对应的sub-reducer大致写法如下:exportconstactionTypes={ADMIN_URI_LOCATION:"ADMIN_URI_LOCATION"};constinitialState={url:"/"};exportconstactions={change_location_admin:function(url){return{type:actionTypes.ADMIN_URI_LOCATION,data:url}}};exportfunctionreducer(state=initialState,action){switch(action.type){caseactionTypes.ADMIN_URI_LOCATION:复制代码返回{...状态,url:action.data};默认值:返回状态}}constadmin=combineReducers({adminGlobalState:reducer,users,tags});exportdefaultadmin定义了initialState(这个状态节点上的initialState,不是全部状态)、actions、actionTypes和reducer。然后倒入减速机。在索引中被引入后,成为状态中的管理节点。configureStore配置商店的文件。这个文件的作用,顾名思义,就是配置store。其中,我们主要做了以下工作。applyMiddleware->安装一些中间件,reducer,并区分环境,判断是否添加开发工具。如:devToolsExtension配合更新createStore代码如下:constwin=window;constsagaMiddleware=createSagaMiddleware();constmiddlewares=[];letstoreEnhancers;if(process.env.NODE_ENV==='production'){storeEnhancers=compose(applyMiddleware(...middlewares,sagaMiddleware));}else{storeEnhancers=compose(applyMiddleware(...middlewares,sagaMiddleware),(win&&win.devToolsExtension)?win.devToolsExtension():(f)=>f,);}导出默认函数configureStore(initialState={}){conststore=createStore(rootReducer,initialState,storeEnhancers);sagaMiddleware.run(rootSaga);if(module.hot&&process.env.NODE_ENV!=='production'){//为reducers启用Webpack热模块替换module.hot.accept('./reducers',()=>{constnextRootReducer=require('./reducers/index');store.replaceReducer(nextRootReducer);});}returnstore;}最后倒入store,用于在App中使用react-router配置说明。react-router中的配置主要在/container/index.js文件中。该文件负责导出所有路由中的文件。说说项目的大致路由规则。默认输入域名(我们这里是localhost)直接进入首页。那是我们项目的前端部分。/->首页(虽然是首页,但仔细看页面结构,其实是文章列表页)/:tag->其他文章列表页/detail/:id->详情页/admin->后台管理主页/admin/xxx->后台管理页面的某个模块,如:/admin/managerTags->标签管理页面/404->notFound所以根据路由配置,规则先具体后模糊。而这里涉及到路由嵌套,所以必须提取组件:index.js渲染部分如下:render(){let{isFetching}=this.props;return(
