RxJS自定义操作符无法访问this问题求助
解决RxJS自定义操作符中this绑定为undefined的问题
你当前的问题出在bind(this)的绑定位置错误——shouldLoadNewOptimizationData()返回的是filter创建的操作符函数,你把this绑定到这个函数上完全没用,真正需要绑定上下文的是filter内部的那个回调函数。
下面是几种可行的修复方案:
方案一:让自定义操作符接收上下文参数
修改操作符,显式传入需要的上下文对象,避免依赖this的绑定:
function shouldLoadNewOptimizationData(context) { return filter(([p1,p2,p3]) => { // 你的业务逻辑 if(/* 你的判断条件 */){ context.store.dispatch(/* 你的action */); } // 必须返回布尔值,决定是否保留当前数据流中的值 return /* 你的过滤结果 */; }) }
使用时直接传入当前上下文:
effect = createEffect(()=> this.actions$.pipe( ofType(/* action type */), withLatestFrom( //...selectors ), shouldLoadNewOptimizationData(this), // 后续操作符 ) )
方案二:在自定义操作符内部绑定回调的this
如果坚持使用普通函数作为filter的回调,可以在操作符内部给回调绑定传入的上下文:
function shouldLoadNewOptimizationData(context) { const filterHandler = function([p1,p2,p3]) { // 你的业务逻辑 if(/* 你的判断条件 */){ this.store.dispatch(/* 你的action */); } return /* 你的过滤结果 */; }; return filter(filterHandler.bind(context)); }
使用方式和方案一一致,传入this即可。
额外提醒
- 注意
filter操作符的回调必须返回布尔值,否则数据流会异常中断或者不符合预期; - 尽量避免在RxJS操作符中依赖
this上下文,显式传递参数会让代码更清晰、更易维护。
内容的提问来源于stack exchange,提问作者Or Shalmayev
相关产品推荐
相关产品推荐

