我目前正在为我的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的调试控制台中检查状态时,它看起来正确。 控制台中也没有显示错误。
什么不起作用: 状态对页面有影响。 调用该过程后,不会重新呈现该页面。 因此状态和页面不一致。 我已经尝试过强制渲染。 没有成功。
我的错误在哪里? 有人可以给我提示吗?
答案 0 :(得分:0)
我自己找到了原因。 我确实两次实施了组件Kontrolle。 一有裁判一无裁判。 我在错误的实现中检查了重新设计的UI。 所以,我自己的错误。 我发布的代码可以正常工作。
感谢所有人。