在react项目中仍是用了懒加载react-loadablecss
import Loadable from 'react-loadable' const Loading = ({ //自定义公用加载时页面 pastDelay, timedOut, error }) => { if(pastDelay) { return <div></div>; } else if(timedOut) { return <div>Taking a long time...</div>; } else if(error) { return <div>Error!</div>; } return null; } //路由中页面 懒加载 view const MusicIndex = Loadable({ loader: () => import('./component/MusicIndex/MusicIndex'), loading: Loading, timeout: 10000 })
# react 的基本组件生命周期以下 1. constructor 组件的构造函数:接受父组件的参数,初始化state,绑定函数等等的操做 2. componentWillMount 组件渲染以前,每次组件渲染都会触发一次 3. componentDidMount 组件渲染以后,每次组件渲染都会触发一次,子组件都挂载好,能够使用refs,能够使用异步方法,防止阻塞UI 4. componentWillReceiveProps 该函数接收到新的props才会被调用,render不会触发该函数 5. shouldComponentUpdate 在组件接收到新的props或者state时被调用。在初始化时或者使用forceUpdate时不被调用。 6. componentWillUpdate 该函数接收到新的props或者state与render以前才会被调用,初始化不会触发该函数 7. componentDidUpdate 该函数在组件完成更新后当即调用。在初始化时不会被调用。 8. componentWillUnmount 该函数为组件被移除(卸载)时被调用 class App extends Component { constructor(props) { super(props) } componentWillMount(){} componentDidMount() {} componentWillReceiveProps(newProps) {} shouldComponentUpdate(newProps, newState) { return true; } componentWillUpdate(nextProps, nextState) {} componentDidUpdate(prevProps, prevState) {} componentWillUnmount() {} render() { return( <div className="App">展现APP页面</div> ); } }
import { HashRouter as Router, Route, Link } from "react-router-dom" import { MusicIndex } from "./../MusicIndex.js" import { MusicRanking } from "./../MusicRanking.js" import { MusicCollection } from "./../MusicCollection.js" import { MusicPersonal } from "./../MusicPersonal.js" render() { return( <div className="App"> <Router> <div className="app-box-view"> <Route exact path="/" component={ MusicIndex } /> <Route path="/ranking" component={ MusicRanking } /> <Route path="/collection" component={ MusicCollection } /> <Route path="/personal" component={ MusicPersonal } /> </div> </Router> <div className="App-tabbar"> <span onClick={ window.location.hash = '/'}>页面一</span> <span onClick={ window.location.hash = '/ranking'}>页面二</span> <span onClick={ window.location.hash = '/collection'}>页面三</span> <span onClick={ window.location.hash = '/personal'}>页面四</span> </div> <Audio></Audio> </div> ); }
redux分为3各部分vue
1. redux分割例子 import { combineReducers } from "redux" import { albumItem } from './reducers/MusicAlbumItem' import { ranking } from './reducers/MusicRanking' import { user } from './reducers/MusicUser' import { collection } from './reducers/MusicCollection' export const rootReducer = combineReducers({ player, ranking, user, collection }) 2. 单独分割出来redux的例子 const R_CHANGE = "改变缓存排行版" const R_INIT = "重置排行版" const R_LOADING = "排行版列表加在完毕" //如下为store let rankingStore = { rank:[], target:{ id:0, playlist:{} }, loading:true } //如下为reducers export const ranking = (state = rankingStore, action) => { switch(action.type) { case R_INIT: state.rank = action.list return Object.assign({}, state) case R_CHANGE: state.target = action.list return Object.assign({}, state) case R_LOADING: state.loading = false return Object.assign({}, state) default: return state } } //如下为action export function r_change(list) { return { type: R_CHANGE, list:list } } export function r_init(list) { return { type: R_INIT, list:list } } export function r_loading() { return { type: R_LOADING } }
import React from 'react'; import ReactDOM from 'react-dom' import { createStore, applyMiddleware, compose } from 'redux' import { BrowserRouter } from 'react-router-dom' import registerServiceWorker from './registerServiceWorker' import './index.css' import App from './App' import { rootReducer } from './redux/index' import thunk from 'redux-thunk' import { Provider } from 'react-redux' const store = createStore(rootReducer, compose( applyMiddleware(thunk), window.devToolsExtension ? window.devToolsExtension() : f => f )) //经过路由注入store,使其可被全局访问stroe(前提是需访问的组件引入对应的redux) ReactDOM.render( (<Provider store={store}> <BrowserRouter> <App /> </BrowserRouter> </Provider>), document.getElementById('root') );