RecoilJS 的事件发射器模式

问题描述

在 Recoil 中,我们可以使用一种模式或技术来处理事件吗?

在 Saga 中,我们可以使用发射方法并创建数据流。

我一直在思考如何在 Recoil 中实现这样的目标。

例如扫描蓝牙连接设备。

 manager.onStateChange(state => {
      const enableScanning = state === State.PoweredOn

      if (enableScanning) {
        manager.startDeviceScan(
          null,{ allowDuplicates: false },(error,scannedDevice) => {
            if (error) {
              return
            }
            if (scannedDevice !== null) {
              //HERE WE NEED TO HANDLE THE ADDITION OF THE DEVICE TO A LIST
            }
          }
        )
      }
    },true)

解决方法

我认为您正在寻找的是 useRecoildCallback。它允许您访问所有状态(快照),而无需参与重新渲染生命周期。此外,一旦您拥有该快照,就有一个 API 允许您过滤更改的状态,

for (const node of snapshot.getNodes_UNSTABLE({ isModified: true })) {
        if (atomKeys.length === 0 || atomKeys.includes(node.key)) {
            console.debug(node.key,snapshot.getLoadable(node).contents);
        }
    }

尽管它不是事件处理程序或引发事件,但您可以定期调用它并监视状态变化。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...