React类组件中的Electron ipcRenderer事件

时间:2017-09-27 15:25:22

标签: reactjs events event-handling electron

我正在使用Electron和React,我遇到了一个小问题。

我在组件的willMount方法中触发一个事件(ipcRenderer.send),并在组件的didMount方法中侦听响应(ipcRenderer.on)。

但是当我尝试在侦听器中设置State时,我在控制台(见下文)中收到警告。

warning.js:35警告:setState(...):只能更新已安装或安装的组件。这通常意味着您在未安装的组件上调用了setState()

以下是代码:

GET

我已阅读相关帖子ipcRenderer in React component constructor

他使用我做的ref,但现在根变量为null, 这对我来说意味着组件没有安装。

    import {remote, ipcRenderer} from 'electron';
    import React from 'react';
    import ListItem from './ListItem';

    constructor(props) {
     super(props);
     this.state = {
      packages: []
     }
     this.updatePackages = this.updatePackages.bind(this);
    }

    updatePackages(packages) {
      this.setState({
        packages: packages
      });
    }

    componentWillMount() {
     ipcRenderer.send('get-global-packages');
    }

    componentDidMount() {
     ipcRenderer.on('get-global-packages-reply', (event, packages) => 
     {
      this.updatePackages(packages);
     });
    }

    componentWillUnmount() {
     ipcRenderer.removeAllListeners(['get-global-packages-reply');
    }

    render() {
     let packages = this.props.packages;
     if(!packages) {
      return null;
     }
     return (
      <div className="packages-list" ref={(el) => {
        this.list = el;
       }}/>
       {packages.map((pkg, idx) => {
         return <ListItem key={idx} {...pkg}/>
       })}
      </div>
     )
    }

我可以做些什么来清除警告或正确使用ref prop?

相关项目回购): https://github.com/rvpanoz/luna

提前致谢。

0 个答案:

没有答案