TCG開發日誌(5)Decorator, React-router

來源:互聯網
上載者:User

標籤:

通過webpack可以把整個React項目整合成一個單頁面的網站,此時可以通過react-router來處理路由。

首先安裝:

npm install react-router --save

 

由於react-router使用了history,要在webpack.config.js中進行相應的配置:

devServer: {
  historyApiFallback: true

}

否則,類似localhost:8080/foo的URL會返回404。之後為了將整個項目做成一個單頁面,做如下處理:

import { Router, browserHistory } from ‘react-router‘;

export default class App extends React.Component

{
  routes = {
    path: ‘/‘,
    indexRoute: {
      onEnter: (nextState, replace) => {},
    },
    childRoutes:[
    ]
  }

  render(){
    return <Router history={browserHistory} routes={this.routes} />
  }
}

其中,routes的配置可參見react-router的github頁面。同時,需要給別的組件都配置相應的route,這些route要寫在routes.childRoutes裡。

由於大量的組件都需要進行route的設定,這可以看作組件類的共同特徵,可以用Decorator的方式讓代碼更簡潔,Decorator的詳細資料可以查到,但為了使用它,首先必須安裝相應的Babel外掛程式:

npm install babel-plugin-transform-decorators-legacy --save,同時,需要在.babelrc中的plugins裡做相應配置:

"plugins": [
  "transform-class-properties",
  "babel-plugin-transform-decorators-legacy"
],

 

這裡我們定義一個函數reactComponentEx,用它返回一個Decorator函數,並在函數中對類做相應的處理,主要是配置react-router:

export default function reactComponentEx(path){
  return function (target, property, descriptor){

    class _target extends target{
      static route = {
        path:path,
        component:_target,
        indexRoute:{},
        childRoutes:target.childRoutes && target.childRoutes.map(v=>{
          return {
            path: v.path,
            component: v.component
          }
        })
      }

    };

    return _target;
  }
}

此時,可以將這個函數寫在每一個想要設定路由的react組件的最外面,如:

@reactComponentEx(‘foo‘)

export default class Foo extends React.Component{......

 

再把它配置到剛才的總route裡:

routes = {
    path: ‘/‘,
    indexRoute: {
      onEnter: (nextState, replace) => {},
    },
    childRoutes:[

      require("foo").default.route   //通過Decorator已經生產了這個route
    ]
  }

 

就可以用localhost:8080/foo的形式訪問到相應的頁面了。

 

TCG開發日誌(5)Decorator, React-router

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.