Javascript 从Electron';s全球短切

Javascript 从Electron';s全球短切,javascript,reactjs,electron,Javascript,Reactjs,Electron,我有一个带有方法的React组件: class Timer extends Component{ start(){ this.timerInterval=setInterval(this.tick,1000); } [...] } 我希望能够在用户按下组合键时调用start()方法。 在main.js文件中,我有: app.on('ready', function(){ createWindow(); globalShortcut('Cmd+A

我有一个带有方法的React组件:

class Timer extends Component{

  start(){
    this.timerInterval=setInterval(this.tick,1000);
  }

  [...]
}
我希望能够在用户按下组合键时调用start()方法。 在main.js文件中,我有:

 app.on('ready', function(){
      createWindow();
      globalShortcut('Cmd+Alt+K',function(){
        //call start() here 
      })
    });

我怎样才能做到这一点?关于这个问题,我找不到太多的信息。

我希望有电子专业经验的人能解决这个问题,但现在已经整整一天了

要跨越外部世界/反应组件的障碍,最好使用自定义事件。要做到这一点,您需要访问React为响应
render
调用而创建的DOM元素,然后直接在元素上侦听自定义事件。下面是一个示例,请参见注释了解详细信息。注意,在这个例子中,我传递了一个对象作为事件细节;这只是为了表明您可以做到这一点(不仅仅是简单的字符串),但您可以只做
{detail:“Tick#”+ticker}
,直接使用
event.detail
作为消息

类示例扩展了React.Component{
//正常组件设置
构造函数(…参数){
超级(…args);
this.state={消息:'};
//我们的事件处理程序。(我们也可以使用
//字段语法,目前处于ECMA TC39过程的第3阶段;大多数
//使用JSX Transfile类字段语法的设置。)
this.doSomething=事件=>{
this.setState({message:event.detail.message | |“”);
};
}
//使用从外部(在本例中)查找DOM中元素的方式进行渲染
//我使用的是一个类,但它可以是一个ID,或者只是知道它在DOM中的位置)。
//我们使用ref,以便在创建elemet时钩住事件。
render(){
返回this.element=element}>{this.state.message};
}
//挂载时钩住事件,卸载时将其解开
componentDidMount(){
this.element.addEventListener(“我的事件”,this.doSomething);
}
组件将卸载(){
this.element.removeEventListener(“我的事件”,this.doSomething);
}
}
//顶级应用程序渲染
render(,document.getElementById(“根”));
//演示触发事件,在我们的例子中,大约每半秒触发一次
让ticker=0;
设置间隔(()=>{
const foo=document.querySelector(#root.foo);
++股票行情;
dispatchEvent(新的CustomEvent(“我的事件”{detail:{message:“Tick#”+ticker}}));
}, 500);

当需要使用react内的电子库时,应使用electron remote导入

const { globalShortcut } = require('electron').remote;

class Timer extends Component{
     componentDidMount = () => {

    globalShortcut.register('Cmd+Alt+K', () => {
      //your call
      this.start()
    });
}

  start(){
    this.timerInterval=setInterval(this.tick,1000);
  }

  [...]
}