我目前正在为我的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的调试控制台中检查状态时,它看起来正确。控制台中也没有显示错误。
什么不起作用:状态对页面有影响。调用过程后页面没有重新呈现。所以状态和页面不一致。我已经尝试强制呈现了。没有成功。
我错在哪里?谁能给予我点提示?
1条答案
按热度按时间xlpyo6sf1#
我自己找到了原因。我确实实现了组件Kontrolle两次。一次有ref,一次没有ref。我检查了错误实现的渲染UI。所以,我自己的错误。我发布的代码工作正常。
感谢所有人。