最近react-router的一個作者另外寫了一個類react-router的元件@reach/router
,嘗試後感覺太棒了。如果你的專案只是web端的話我認為可以把你的react-router換掉了。
下面是我到目前看到的所有非常好的點。
-
小,就4kb,壓縮後比react-router小40kb左右。
-
更少的配置
a. react-router需要3個包(
history
,react-router-dom
,react-router-redux
),reach-router只需要一個。b. 不需要在store配置router相關資訊
c. 不需要顯示的使用history
// in store config file //react-router import { routerMiddleware } from `react-router-redux`; import createHistory from `history/createBrowserHistory`; const history = createHistory(); const middleware = routerMiddleware(history); export { history }; //reach/router, nothing 複製程式碼
-
更好用
a. 當你想跳轉頁面時
// react-router import { push } from `react-router-redux`; import { PropTypes } from `prop-types`; // use it this.context.store.dispatch(push(`/see-you`)); FooComponent.contextTypes = { store: PropTypes.object, }; 複製程式碼
// reach/router import { navigate } from "@reach/router"; navigate(`/lol`); 複製程式碼
b.當你想取url裡面的引數時
// react-router import { withRouter } from `react-router-dom`; import { PropTypes } from `prop-types`; //use it const { match: { params: { iAmHere } } } = this.props; FooComponent.propTypes = { match: PropTypes.object, }; export default withRouter(FooComponent); 複製程式碼
// reach/router const { iAmHere } = this.props; 複製程式碼
-
基本一樣的api,學習成本非常低
-
原始碼非常簡潔,總共就3個檔案,900行,如果你想深入理解單頁應用的路由是怎麼實現的,reach-router,絕對是絕佳的下手資料。
不說了,去看看吧
github.com/reach/route…