当我在后台收到通知时,我尝试使用apollo-hooks和react-native-firebase从服务器获取数据。
然后我创建了新函数并注册了HeadlessTask。
但是它发生了Hooks can only be called inside the body of a function component.
反应性:0.59.8 react-native-firebase:5.5.6 react-apollo-hooks:0.4.5
我试图通过react-apollo-hooks获取数据,但发生错误。
而且,我得到了另一个上下文的自定义钩子,它也发生了Hooks can only be called inside the body of a function component.
错误。
index.js:
...
AppRegistry.registerHeadlessTask('RNFirebaseBackgroundMessage', () => bgMessage)
bgMessage.js:
export const bgMessage = message => {
const [mValue, setMValue] = useTest()
const {
data: { type },
} = message
switch (type) {
case 'Installing': {
setMValue(type)
displayedNotification(message, FCM_MESSAGES_STATUS.Message)
return Promise.resolve(message)
}
default:
displayedNotification(message, FCM_MESSAGES_STATUS.Message)
return Promise.resolve(message)
}
}
export const useTest = () => {
const [mValue, setMValue] = useState(null)
return [mValue, setMValue]
}
这里有使用钩子的方法吗?
答案 0 :(得分:0)
您可以尝试一下。
bgMessage.js
import React, { useState } from 'react';
...
export default async (message) => {
const [mValue, setMValue] = useState('')
const {
data: { type },
} = message
switch (type) {
case 'Installing': {
setMValue(type)
displayedNotification(message, FCM_MESSAGES_STATUS.Message)
return Promise.resolve(message)
}
default:
displayedNotification(message, FCM_MESSAGES_STATUS.Message)
return Promise.resolve(message)
}
}
答案 1 :(得分:0)
在 Headless JS 中不允许使用钩子。根据对此 issue 钩子的回答被视为 UI 元素,因此不允许在 Headless JS 中使用。