Blazor组件重新渲染后的调用方法

时间:2020-10-22 05:50:30

标签: callback blazor lifecycle

我正在做一种流程图编辑器。 我有一个节点,它可以四处移动,并具有左上角的坐标: enter image description here

有一个传出过渡,右下角的黑色弯曲线,相对于Node的坐标计算开始坐标,例如: lineStartPosition =(Node.X + Line.StartX,Node.Y + Line.StartY)

当我单击复选标记时,该框将展开,并移动黑点(线条所在的位置): enter image description here

因为黑点(线连接点)移动了,所以我需要重新计算Line.StartX / Y值。我有一种方法。

当我选中该框时,它将导致组件重新渲染,然后我希望在重新渲染之后调用线坐标计算方法。 我将有一个像这样的方法作为复选框侦听器:

    private async Task CheckboxClicked(ChangeEventArgs args) {
        bool c = bool.Parse(args.Value.ToString());
        NodeModel.UseRandomRange = c;

        Line.ReCalcCoords();
    }

但是,很明显,在重新渲染之前调用了ReCalcCoords方法,所以我得到了错误的计算偏移量。 我求助于此解决方案:

    private async Task CheckboxClicked(ChangeEventArgs args) {
        bool c = bool.Parse(args.Value.ToString());
        NodeModel.UseRandomRange = c;

        await Task.Run(ExecuteNastyHack);
    }

    private void ExecuteNastyHack() {
        Thread.Sleep(50);
        Line.ReCalcCoords();
    }

但是我觉得这很不对劲。 我知道组件具有“生命周期”方法,例如: OnInitialized-但这仅被调用一次。 OnAfterRender-但这一直都在被调用(可能是因为我的应用程序中发生了其他鼠标移动事件),所以这实际上也不可用。

有更好的方法吗?

0 个答案:

没有答案