Pārlūkot izejas kodu

move menuData to state

陈帅 7 gadi atpakaļ
vecāks
revīzija
85d556d301
2 mainītis faili ar 37 papildinājumiem un 26 dzēšanām
  1. 2 2
      src/components/SiderMenu/BaseMenu.js
  2. 35 24
      src/layouts/BasicLayout.js

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

@@ -80,7 +80,7 @@ export default class BaseMenu extends PureComponent {
   getSubMenuOrItem = item => {
     // doc: add hideChildrenInMenu
     if (item.children && !item.hideChildrenInMenu && item.children.some(child => child.name)) {
-      const name = formatMessage({ id: item.locale });
+      const name = item.locale ? formatMessage({ id: item.locale }) : item.name;
       return (
         <SubMenu
           title={
@@ -108,7 +108,7 @@ export default class BaseMenu extends PureComponent {
    * @memberof SiderMenu
    */
   getMenuItemPath = item => {
-    const name = formatMessage({ id: item.locale });
+    const name = item.locale ? formatMessage({ id: item.locale }) : item.name;
     const itemPath = this.conversionPath(item.path);
     const icon = getIcon(item.icon);
     const { target } = item;

+ 35 - 24
src/layouts/BasicLayout.js

@@ -22,28 +22,39 @@ const { Content } = Layout;
 
 // Conversion router to menu.
 function formatter(data, parentPath = '', parentAuthority, parentName) {
-  return data.map(item => {
-    let locale = 'menu';
-    if (parentName && item.name) {
-      locale = `${parentName}.${item.name}`;
-    } else if (item.name) {
-      locale = `menu.${item.name}`;
-    } else if (parentName) {
-      locale = parentName;
-    }
-    const result = {
-      ...item,
-      locale,
-      authority: item.authority || parentAuthority,
-    };
-    if (item.routes) {
-      const children = formatter(item.routes, `${parentPath}${item.path}/`, item.authority, locale);
-      // Reduce memory usage
-      result.children = children;
-    }
-    delete result.routes;
-    return result;
-  });
+  return data
+    .map(item => {
+      let locale = 'menu';
+      if (parentName && item.name) {
+        locale = `${parentName}.${item.name}`;
+      } else if (item.name) {
+        locale = `menu.${item.name}`;
+      } else if (parentName) {
+        locale = parentName;
+      }
+      if (item.path) {
+        const result = {
+          ...item,
+          locale,
+          authority: item.authority || parentAuthority,
+        };
+        if (item.routes) {
+          const children = formatter(
+            item.routes,
+            `${parentPath}${item.path}/`,
+            item.authority,
+            locale
+          );
+          // Reduce memory usage
+          result.children = children;
+        }
+        delete result.routes;
+        return result;
+      }
+
+      return null;
+    })
+    .filter(item => item);
 }
 
 const memoizeOneFormatter = memoizeOne(formatter, isEqual);
@@ -85,6 +96,7 @@ class BasicLayout extends React.PureComponent {
   state = {
     rendering: true,
     isMobile: false,
+    menuData: this.getMenuData(),
   };
 
   componentDidMount() {
@@ -224,9 +236,8 @@ class BasicLayout extends React.PureComponent {
       children,
       location: { pathname },
     } = this.props;
-    const { isMobile } = this.state;
+    const { isMobile, menuData } = this.state;
     const isTop = PropsLayout === 'topmenu';
-    const menuData = this.getMenuData();
     const routerConfig = this.matchParamsPath(pathname);
     const layout = (
       <Layout>