[英]react-electron ipcRenderer in useEffect does not rerender
I'm trying to make a global accessible object, so that its values can be changed and can be read from every component.我正在尝试制作一个全局可访问的 object,以便可以更改其值并可以从每个组件中读取。 I've create a classs with static fields:我用 static 字段创建了一个类:
export default class Settings {
static first: string;
static second: string;
}
Lets say I have two components in separate files:假设我在单独的文件中有两个组件:
import Settings from './Settings'
// located in firstComponent file
export default function FirstComponent() {
Settings.First = 'test' <---------------- SET VALUE
return (some html)
}
// located in secondComponent file
export default function SecondComponent() {
let qq = Settings.First <----------------------- ASSUME HERE IS VALUE "TEST"
}
But it is not working.但它不起作用。 How I can create static class/fields that will be accessible within all components like C# static classes.如何创建 static 类/字段,这些类/字段可在 C# static 类等所有组件中访问。 Is it even possible?甚至可能吗?
Thanks in advance提前致谢
UPD Looks like the problem in ipcRenderer: UPD看起来像 ipcRenderer 中的问题:
export default function SettingsEditor() {
const [state, setState] = React.useState({
ipAddress: Settings.ipAddress,
});
useEffect(() => {
electron.ipcRenderer.once('readSettings', (args) => {
console.log('Filling settings');
console.log(args); <------ HERE WE HAVE VALUE like 10.10.10.10
setState({ ...state, ipAddress: args.ipAddress});
console.log(state.ipAddress); <------ UNDEFINED
state.ipAddress = args.ipAddress;
console.log(state.ipAddress); <------ UNDEFINED
Settings.ipAddress= args.ipAddress;
console.log(Settings.gateIpAddress); <------ UNDEFINED
});
electron.settingsApi.read();
}, []);
How I can handle this?我该如何处理?
The reason is - I'm stupid =)原因是-我很愚蠢=)
When I save settings I did it like this:当我保存设置时,我这样做了:
const settings = new Settings();
settings.ipAddress= state.ipAddress;
console.log(JSON.stringify(settings));
electron.settingsApi.save(settings); <------ PASS OBJECT
But when I return response it was:但是当我返回响应时,它是:
ipcMain.on('readSettings', (event, _) => {
storage.getAll((err: Error, data: object) => {
if (err) {
return;
}
const { appSettings } = data;
const settings = new Settings();
settings.ipAddress= appSettings.ipAddress;
console.log('reading settings');
console.log(JSON.stringify(settings));
event.reply('readSettings', JSON.stringify(settings)); <-------- FACEPALM
});
});
What I can say - genius我能说的——天才
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.