Przeglądaj źródła

use this.props.routes replace import config

afc163 7 lat temu
rodzic
commit
9420791858
2 zmienionych plików z 31 dodań i 29 usunięć
  1. 1 1
      src/components/SiderMenu/BaseMenu.js
  2. 30 28
      src/layouts/BasicLayout.js

+ 1 - 1
src/components/SiderMenu/BaseMenu.js

@@ -23,7 +23,7 @@ const getIcon = icon => {
 };
 
 export const getMenuMatches = (flatMenuKeys, path) =>
-  flatMenuKeys.filter(item => pathToRegexp(item).test(path));
+  flatMenuKeys.filter(item => item && pathToRegexp(item).test(path));
 
 export default class BaseMenu extends PureComponent {
   constructor(props) {

+ 30 - 28
src/layouts/BasicLayout.js

@@ -16,8 +16,6 @@ import logo from '../assets/logo.svg';
 import Footer from './Footer';
 import Header from './Header';
 import Context from './MenuContext';
-// TODO: should use this.props.routes
-import routerConfig from '../../config/router.config';
 
 const { Content } = Layout;
 const { check } = Authorized;
@@ -48,28 +46,6 @@ function formatter(data, parentPath = '', parentAuthority, parentName) {
   });
 }
 
-// get menu map data
-const menuData = formatter(routerConfig[1].routes);
-
-/**
- * 获取面包屑映射
- * @param {Object} menuData 菜单配置
- */
-const getBreadcrumbNameMap = memoizeOne(menu => {
-  const routerMap = {};
-  const mergeMenuAndRouter = data => {
-    data.forEach(menuItem => {
-      if (menuItem.children) {
-        mergeMenuAndRouter(menuItem.children);
-      }
-      // Reduce memory usage
-      routerMap[menuItem.path] = menuItem;
-    });
-  };
-  mergeMenuAndRouter(menu);
-  return routerMap;
-}, isEqual);
-
 const query = {
   'screen-xs': {
     maxWidth: 575,
@@ -99,8 +75,8 @@ class BasicLayout extends React.PureComponent {
   constructor(props) {
     super(props);
     this.getPageTitle = memoizeOne(this.getPageTitle);
-    // Because there are many places to be. So put it here
-    this.breadcrumbNameMap = getBreadcrumbNameMap(menuData);
+    this.getBreadcrumbNameMap = memoizeOne(this.getBreadcrumbNameMap, isEqual);
+    this.breadcrumbNameMap = this.getBreadcrumbNameMap();
   }
 
   state = {
@@ -132,7 +108,7 @@ class BasicLayout extends React.PureComponent {
   }
 
   componentDidUpdate() {
-    this.breadcrumbNameMap = getBreadcrumbNameMap(menuData);
+    this.breadcrumbNameMap = this.getBreadcrumbNameMap();
   }
 
   componentWillUnmount() {
@@ -148,6 +124,32 @@ class BasicLayout extends React.PureComponent {
     };
   }
 
+  getMenuData() {
+    const {
+      route: { routes },
+    } = this.props;
+    return formatter(routes);
+  }
+
+  /**
+   * 获取面包屑映射
+   * @param {Object} menuData 菜单配置
+   */
+  getBreadcrumbNameMap() {
+    const routerMap = {};
+    const mergeMenuAndRouter = data => {
+      data.forEach(menuItem => {
+        if (menuItem.children) {
+          mergeMenuAndRouter(menuItem.children);
+        }
+        // Reduce memory usage
+        routerMap[menuItem.path] = menuItem;
+      });
+    };
+    mergeMenuAndRouter(this.getMenuData());
+    return routerMap;
+  }
+
   getPageTitle = pathname => {
     let currRouterData = null;
     // match params path
@@ -230,7 +232,7 @@ class BasicLayout extends React.PureComponent {
             Authorized={Authorized}
             theme={silderTheme}
             onCollapse={this.handleMenuCollapse}
-            menuData={menuData}
+            menuData={this.getMenuData()}
             {...this.props}
           />
         )}