gpt4 book ai didi

javascript - 在 RxJS 中是否有更简洁(更动态)的方式来编写此映射函数?

转载 作者:行者123 更新时间:2023-11-30 11:09:45 24 4
gpt4 key购买 nike

我需要在用户上传图片后推送一条新路由。新路由根据用户当前所在的特定模块而有所不同。目前,actionRouteEpic 过滤新路由,然后在每个 if 语句中调用 PUSH_ROUTE,但是有没有办法更新route 变量,然后在切换映射的末尾调用一次 PUSH_ROUTE

第一个代码示例是可以工作但看起来很笨重的版本。第二个示例是最近一次对清洁版本的不成功尝试。

目前这有效:

const actionRouteEpic = action$ =>
action$.pipe(
ofType('DISPATCH_ACTION_ROUTE'),
switchMap(action => {
if (action.module === 'module_one') {
return of({
type: 'PUSH_ROUTE',
route: '/route-one'
});
}
if (action.module === 'module_two') {
return of({
type: 'PUSH_ROUTE',
route: '/route-two'
});
}
if (action.module === 'module_three') {
return of({
type: 'PUSH_ROUTE',
route: '/route-three'
});
}
return empty();
}
);

const pushRouteEpic = action$ =>
action$.pipe(
ofType('PUSH_ROUTE'),
map(action => push(`${action.route}`))
);

尝试更清洁的版本:

const actionRouteEpic = action$ =>
action$.pipe(
ofType('DISPATCH_ACTION_ROUTE'),
switchMap(action => {
let route = ''
if (action.module === 'module_one') {
route = '/route-one';
}
if (action.module === 'module_two') {
route = '/route-two';
}
if (action.module === 'module_three') {
route = '/route-three';
}
return of({
type: 'PUSH_ROUTE',
route: route
});
}
);

const pushRouteEpic = action$ =>
action$.pipe(
ofType('PUSH_ROUTE'),
map(action => push(`${action.route}`))
);

谢谢,感谢。

最佳答案

使用 js 对象作为 HashMap 并定义一个“路由器”,将每个模块映射到相关的入口路径

const actionRouteEpic = action$ =>
const router = {
module_one: '/route-one',
module_two: '/route-two'
}
action$.pipe(
ofType('DISPATCH_ACTION_ROUTE'),
switchMap(action => {
return of({
type: 'PUSH_ROUTE',
route: router[action.module]
});
}
);

关于javascript - 在 RxJS 中是否有更简洁(更动态)的方式来编写此映射函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54183131/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com