簡體   English   中英

useEffect 中的 react-electron ipcRenderer 不會重新渲染

[英]react-electron ipcRenderer in useEffect does not rerender

我正在嘗試制作一個全局可訪問的 object,以便可以更改其值並可以從每個組件中讀取。 我用 static 字段創建了一個類:

export default class Settings {
  static first: string;

  static second: string;
}

假設我在單獨的文件中有兩個組件:

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"
}

但它不起作用。 如何創建 static 類/字段,這些類/字段可在 C# static 類等所有組件中訪問。 甚至可能嗎?

提前致謝

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();
  }, []);

我該如何處理?

原因是-我很愚蠢=)

當我保存設置時,我這樣做了:

    const settings = new Settings();
    settings.ipAddress= state.ipAddress;
    console.log(JSON.stringify(settings));
    electron.settingsApi.save(settings);   <------ PASS OBJECT

但是當我返回響應時,它是:

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
  });
});

我能說的——天才

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM