所以我尝试了多种方法来存储状态,但由于某种原因,我不明白为什么我会丢失某些上下文的(最新)状态。我使用以下函数来获取特定特征的更新(我还直接在特征上尝试了.monitor())。
// This is in the BluetoothProvider
device.monitorCharacteristicForService(
service.uuid,
characteristic.uuid,
onUpdate)
字符串
此外,我有一个函数来检查状态:
// This is in the BluetoothProvider
const updating = () => {
if (currentMatch != null && currentPerson != null) {
console.log('found person')
} else {
console.log('no person')
}
}
型
属性存储在一个带有API/Data MatchProvider
提供程序的reducer中:
const { currentMatch, currentPerson } = useContext(MatchDataContext)
型onUpdate
函数:
const onUpdate = (
error: BleError | null,
characteristic: Characteristic | null
) => {
updating()
}
型
供应商在正确的地方:
<MatchProvider>
<BluetoothProvider>
<Routes>
</Routes>
</BluetoothProvider>
</MatchProvider>
型
我试过把它移动到另一个组件/提供程序/redux,没关系。onUpdate函数就是不能得到正确的状态。UI工作得很好,状态被存储了,但是onUpdate
方法从来没有得到值。
1条答案
按热度按时间ogsagwnx1#
最终我找到了修复方法,我所做的就是将以下内容添加到
BluetoothProvider
中字符串
这让我可以监听
MatchDataContext
的更新并存储引用,因为在这个文件中,当蓝牙设备收到一条新消息时,我会触发一个订阅,而这不是最新的状态。型
出于某种原因,所有调试工具都指示该值在
BluetoothProvider
中,但当我调用该属性时,它为null。