【问题标题】:Control component states from App.js and change their values从 App.js 控制组件状态并更改它们的值
【发布时间】:2019-03-13 11:44:15
【问题描述】:

我有一个与 ble 设备通信的 IOT 应用程序。所以我使用react-native-ble-manager

在这个包中,你必须使用事件监听器,例如;

bleManagerEmitter.addListener( 'BleManagerDidUpdateValueForCharacteristic', this.handlerCharListenerSettings);

(更多信息可以查看this

所以我在不同的屏幕中使用这些事件监听器,但这不是正确的方法。因为在每个具有事件侦听器的屏幕中都会加载这个addListener,这会导致问题。在componentWillUnmount 事件中,您可以清除这些监听器,但正确的方法是将所有这些监听器控制在一个逻辑位置,例如 App.js 或类似位置。

我的问题从这里开始: 我有不同的屏幕,我想从 App.js 设置它们的状态。我的意思是当我从 App.js 事件侦听器更改一个值时,我想让其他屏幕受此值影响。我该如何做到这一点,或者这是使用监听器的正确方式?

我的 RN 版本是 0.58

【问题讨论】:

  • 对于全局状态管理,您应该使用 Context API 或任何 Flux,如 Redux
  • 上下文 API 似乎适合解决问题。我会研究它。谢谢

标签: reactjs react-native bluetooth-lowenergy addeventlistener dom-events


【解决方案1】:

如果您想共享侦听器,请使用前面提到的 Context API 或创建一个包装组件。很像 App.js 创建一个新组件:

    <Wrapper>
      <YourApp/>
    <Wrapper/>

class Wrapper extends React.Component {
  componentWillMount() {
     bleManagerEmitter.addListener( 'BleManagerDidUpdateValueForCharacteristic', this.handlerCharListenerSettings);
   }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-28
    • 2017-05-18
    • 1970-01-01
    • 2019-09-29
    • 2021-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多