我正在使用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
提前致谢。