CEFSharp中的ReactJs保存状态并在启动时还原

时间:2018-11-17 23:17:46

标签: reactjs cefsharp

我目前正在为我的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组件,我创建了一个引用:

<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的调试控制台中检查状态时,它看起来正确。 控制台中也没有显示错误。

什么不起作用: 状态对页面有影响。 调用该过程后,不会重新呈现该页面。 因此状态和页面不一致。 我已经尝试过强制渲染。 没有成功。

我的错误在哪里? 有人可以给我提示吗?

1 个答案:

答案 0 :(得分:0)

我自己找到了原因。 我确实两次实施了组件Kontrolle。 一有裁判一无裁判。 我在错误的实现中检查了重新设计的UI。 所以,我自己的错误。 我发布的代码可以正常工作。

感谢所有人。