Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
A
app-manage-console
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
ReactNative
app-manage-console
Commits
d351832c
提交
d351832c
authored
9月 11, 2018
作者:
vipcxj
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix: 支持多级路由
上级
19996b0b
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
24 行增加
和
3 行删除
+24
-3
layout.js
src/utils/layout.js
+24
-3
没有找到文件。
src/utils/layout.js
浏览文件 @
d351832c
...
...
@@ -7,7 +7,7 @@ const Empty = ({ children }) => {
};
const
parsePageToRoute
=
(
page
,
componentMapper
)
=>
{
const
{
pages
,
childRoutes
,
component
,
...
route
}
=
page
;
const
{
pages
,
childRoutes
,
component
,
entry
,
indexRoute
,
...
route
}
=
page
;
if
(
!
component
)
{
route
.
component
=
Empty
;
}
else
{
...
...
@@ -21,6 +21,24 @@ const parsePageToRoute = (page, componentMapper) => {
if
(
thePages
&&
thePages
.
length
>
0
)
{
route
.
childRoutes
=
thePages
.
map
(
p
=>
parsePageToRoute
(
p
,
componentMapper
));
}
const
theIndexRoute
=
entry
||
indexRoute
;
if
(
theIndexRoute
)
{
if
(
typeof
theIndexRoute
!==
'object'
)
{
throw
new
Error
(
'The
\'
entry
\'
must be an object with struct: { path: string, dsName: string, params: object }.'
);
}
const
{
path
:
entryPath
,
...
state
}
=
theIndexRoute
;
if
(
!
entryPath
||
findRoutesByPath
(
route
.
childRoutes
,
entryPath
).
length
===
0
)
{
throw
new
Error
(
'The
\'
entry
\'
should have a valid path property.'
);
}
route
.
indexRoute
=
{
onEnter
(
nextState
,
replace
)
{
const
theState
=
nextState
.
state
||
{};
replace
(
makePath
(
nextState
.
match
.
url
,
entryPath
),
{
...
theState
,
...
state
});
},
};
}
else
if
(
route
.
childRoutes
&&
route
.
childRoutes
.
length
>
0
)
{
throw
new
Error
(
'No entry is found!'
);
}
return
route
;
};
...
...
@@ -48,7 +66,7 @@ const findRoutesByPath = (routes, path) => {
};
const
_findRouteByPath
=
(
route
,
parts
)
=>
{
if
(
parts
.
length
===
0
)
{
if
(
!
route
||
parts
.
length
===
0
)
{
return
[];
}
const
[
current
,
...
others
]
=
parts
;
...
...
@@ -71,6 +89,9 @@ const _findRouteByPath = (route, parts) => {
};
const
_findRoutesByPath
=
(
routes
,
parts
)
=>
{
if
(
!
routes
)
{
return
[];
}
for
(
const
route
of
routes
)
{
const
res
=
_findRouteByPath
(
route
,
parts
);
if
(
res
.
length
>
0
)
{
...
...
@@ -89,7 +110,7 @@ export const parseLayout = (layout, componentMapper) => {
}
if
(
layout
.
entry
)
{
if
(
typeof
layout
.
entry
!==
'object'
)
{
throw
new
Error
(
'The
\'
entry
\'
must be an object with struct: { path: string, d
atasourc
e: string, params: object }.'
);
throw
new
Error
(
'The
\'
entry
\'
must be an object with struct: { path: string, d
sNam
e: string, params: object }.'
);
}
const
{
path
:
entryPath
,
...
state
}
=
layout
.
entry
;
if
(
!
entryPath
||
findRoutesByPath
(
route
.
childRoutes
,
entryPath
).
length
===
0
)
{
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论