CEFSharp保存状态下的ReactJs和启动时的恢复

kh212irz  于 2023-01-02  发布在  React
关注(0)|答案(1)|浏览(254)

我目前正在为我的C#项目编写一个ReactJS UI。它将在CEFSharp控件中运行。
现在我尝试在状态改变时保存Reacj对象的状态。当c#程序重新启动时,保存的状态应该在页面中恢复。
迄今为止行之有效的方法:传输状态并在C#中保存它是有效的:

exportState(){
    if(navigator.userAgent === 'CEF')
    {
      let jsonstate = JSON.stringify(this.state.Fenster);
      window.nativeHost.kontrolstate(jsonstate);
    }
  }

Fenster是一个自己定义的对象数组。
为了能够将保存的状态推回React组件,我创建了一个ref:

<Kontrolle ref={(kont) => {window.Kontrolle = kont}} />

因此,我可以通过CEFSharp中的javascript调用来调用组件Kontrolle的过程。
为了恢复这种状态,我称之为以下过程:

jsontostate(jsonstring){
    var fen = jsonstring;
    let fenster = this.state.Fenster;

    for (var i=0; i<fen.length;i++) {
      var f = fen[i];
      let index = fenster.findIndex(x => x.id === f.id);
      fenster[index].colum = f.colum;
      fenster[index].offen = f.offen;
      fenster[index].sort = f.sort;
    }

    this.setState({Fenster: fenster});
    this.render();
  }

它看起来工作得很好。状态更新正确。而且当我在CEFSharp的调试控制台中检查状态时,它看起来正确。控制台中也没有显示错误。
什么不起作用:状态对页面有影响。调用过程后页面没有重新呈现。所以状态和页面不一致。我已经尝试强制呈现了。没有成功。
我错在哪里?谁能给予我点提示?

xlpyo6sf

xlpyo6sf1#

我自己找到了原因。我确实实现了组件Kontrolle两次。一次有ref,一次没有ref。我检查了错误实现的渲染UI。所以,我自己的错误。我发布的代码工作正常。
感谢所有人。

相关问题