如何在Reactless-native-firebase中使用Headless JS函数中的钩子?

时间:2019-08-29 10:28:19

标签: reactjs react-native

当我在后台收到通知时,我尝试使用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]
}

这里有使用钩子的方法吗?

2 个答案:

答案 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 中使用。