redux 如何从普通类内的重写函数中调度

zdwk9cvp  于 2022-11-12  发布在  其他
关注(0)|答案(1)|浏览(142)

我在课堂上试图呼叫调度。所有可能的方法都让我走进了死胡同。也许我的情况有点特殊:
我有一个需要重写的类,并且在重写的函数中,我确实需要调用dispatch。

class RolloverModifierEx extends RolloverModifier {

    override hitTestRenderableSeries(rs: IRenderableSeries, mousePoint: Point): HitTestInfo {

       const hitTest = rs.hitTestProvider.hitTestXSlice(mousePoint.x, mousePoint.y, this.hitTestRadius);
       // some code ...

       this.dispatch(updateCurrentValue({
         title:  dataSeriesName ,
         currentValue: yValueCalculated)
       }));

       // some more code ...
       return hitTest;
    }
}

我尝试过不同的方法,比如使用react-redux中的“connect”,或者为调度创建一个 Package 类,但是所有这些都给我带来了同样的问题,那就是不可能从react组件外部调用调度。
我有点笨,真的需要帮助...

e5njpo68

e5njpo681#

找到问题的解决方案:
我使用构造函数将存储传递到类中,然后我可以在其上调用调度。感谢@Javokhir提供的有关存储的提示。

class RolloverModifierEx extends RolloverModifier {

  private store : any;

  constructor(props){
    super(props);
    this.store = props.store;
  }
    override hitTestRenderableSeries(rs: IRenderableSeries, mousePoint: Point): HitTestInfo { 
  const hitTest = mousePoint && rs.hitTestProvider.hitTestXSlice(mousePoint.x, mousePoint.y, this.hitTestRadius);

      // some code... than finally call dispatch 
      this.store.dispatch(updateCurrentValue(
      {
         title:  hitTest.dataSeriesName,
         currentValue: newYValue
      }));    
    }
       return hitTest;
    }
}

从外面这是那么叫这样:

import { useStore } from 'react-redux';

.....
const store: any = useStore();
....
const rolloverModifier = new RolloverModifierEx({
  id: 'rollover',
  snapToDataPoint: false,
  store
});

相关问题