react+typescript, redux + redux-saga
有一个 UI 组件(也是一个 npm package),用的是上面的技术栈写的。现在我们团队要引入 LaunchDarkly ,来设置 feature flag 。目前,通过 saga ,建立一个 event channel ,来 monitor launchdarkly 的 sdk client 。当服务器,设置了某个 feature flag on or off 的时候,sdk client 能够收到通知,“该功能打开 /关闭了“。然后 saga 的 event channel 就能够收到,并派送一个 action ,UI 就能够 ”显示 /隐藏“对应的功能。工作挺好的。
// ldClient is the initialized LaunchDarkly client
export function listen(ldClient: any): any {
return eventChannel(emitter => {
const callback = (settings: any) => {
emitter(settings);
};
ldClient.on("change", callback);
return () => {
ldClient.off("change", callback);
};
});
}
接下来,我们后继要开发很多个这样的 UI 组件(每个 ui-component 是独立的,在一个 webview 或者浏览器的 tab page 里面,只会有一个这样的 ui component),也可以按照上面的 pattern/template 来使用 LaunchDarkly 。
但是,每个 ui component ,都需要在 saga 里面写上两三段几乎一模一样的代码,我觉得这样重复的代码太多了。以后如果这段逻辑需要一点小修改,得改 N 个 packages 并且再发布。
所以,我想有没有办法,把这段逻辑,放到一个 pakcage 里面,然后所有的 ui component 都引用这个 package 就行了。
比如,
想听听大家的意见。
谢谢!