如何在 useEffect 中使用事件侦听器?

时间:2021-03-09 18:50:40

标签: react-native react-hooks

我正在尝试将一些代码从 React Native 类组件移动到功能组件中。原始代码如下所示:

componentDidMount(){
this.state.broadcastSubscriber = DeviceEventEmitter.addListener('event', (intent) =>{ this.broadcastReciever(intent)});
}

到目前为止我所尝试的是不同的排列:

useEffect(() => {
  const broadcastSubscriber = DeviceEventEmitter.addListener('event', (intent) =>{ broadcastReciever(intent)});
    }}, []);

包括诸如将 broadcastReciever 设为 useCallback 函数之类的内容。到目前为止,broadcastReciever 除了第一次在 useEffect 中运行时从未听到任何声音。

谁能指出我做错了什么?谢谢。

PS:我知道 DeviceEventEmitter 已折旧。

2 个答案:

答案 0 :(得分:0)

尝试以下操作:

const broadcastReciever = (intent)=>{ //do you intent code here}

useEffect(() => {
  DeviceEventEmitter.addListener('event', broadcastReciever);
  return DeviceEventEmitter.removeListener('event', broadcastReciever);
}}, []);

答案 1 :(得分:0)

你可以像这样在 useEffect 中添加事件监听器

useEffect(() => {
   
    const loads = props.navigation.addListener('didFocus', () => {
      //do something here on Listner
    });
    return () => {
        loads
    }}, [props.navigation]);