te')); return $arr; } /* 遍历用户所有主题 * @param $uid 用户ID * @param int $page 页数 * @param int $pagesize 每页记录条数 * @param bool $desc 排序方式 TRUE降序 FALSE升序 * @param string $key 返回的数组用那一列的值作为 key * @param array $col 查询哪些列 */ function thread_tid_find_by_uid($uid, $page = 1, $pagesize = 1000, $desc = TRUE, $key = 'tid', $col = array()) { if (empty($uid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('uid' => $uid), array('tid' => $orderby), $page, $pagesize, $key, $col); return $arr; } // 遍历栏目下tid 支持数组 $fid = array(1,2,3) function thread_tid_find_by_fid($fid, $page = 1, $pagesize = 1000, $desc = TRUE) { if (empty($fid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('fid' => $fid), array('tid' => $orderby), $page, $pagesize, 'tid', array('tid', 'verify_date')); return $arr; } function thread_tid_delete($tid) { if (empty($tid)) return FALSE; $r = thread_tid__delete(array('tid' => $tid)); return $r; } function thread_tid_count() { $n = thread_tid__count(); return $n; } // 统计用户主题数 大数量下严谨使用非主键统计 function thread_uid_count($uid) { $n = thread_tid__count(array('uid' => $uid)); return $n; } // 统计栏目主题数 大数量下严谨使用非主键统计 function thread_fid_count($fid) { $n = thread_tid__count(array('fid' => $fid)); return $n; } ?>Using exceljs in my React Native application causes the app to get stuck at the splash screen when initializing a hook from Reac
最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Using exceljs in my React Native application causes the app to get stuck at the splash screen when initializing a hook from Reac

programmeradmin4浏览0评论

I need to create a a way for our Mobile Application made with React-Native to generate excel files and I already have a function that will let me generate a .xlsx file using the library of exceljs. Initially this function works as intended and I was able to generate the .xlsx file. However when introducing an initialization of a Hook from React Query my mobile application gets stuck at the splash screen or sometimes prompt a blank screen. There is no error log coming from the terminal. Basically, No errors are showing since I'm getting a succesfull build.

This is a sample code for generating a .xlsx file.

import * as exceljs from 'exceljs'

export const generateExcelTaxReport = async (
    companyInformation: CompanyInformation
) => {
    const workbook = new exceljs.Workbook()
    const worksheet = workbook.addWorksheet('Sheet1')

        """Code for Generating Excel"""

}

This is a sample React Query Hook for a specific api call that will be used for initialization of a hook.

import { API_ROUTES, API_VERSION } from '@/constants/api'
import { useBanner } from '@/contexts/BannerContext'
import { createGenericMutation } from '@/hooks/createGenericMutation'
import { CreateOrderDTO, Order } from '@/types/order'

export const useCreateOrder = () => {
    const { setBanner } = useBanner()

    return createGenericMutation<Order, CreateOrderDTO>({
        resourceName: 'orders',
        endpoint: `/${API_VERSION}/${API_ROUTES.ORDERS}`,

        onSuccess: (e) => {
            console.log('create order', e)
        },

        onError: (error) => {
            console.error('Failed to create order:', error.response)
            setBanner({
                bannerContent: 'Error creating order'
            })
        }
    })()
}

This is the base generic mutation hook where the react query hooks used are based from.

import { ApiError } from '@/types/api'
import {
    protectedAxiosInstance,
    unprotectedAxiosInstance
} from '@/utils/axios-instances'
import { useMutation, useQueryClient } from '@tanstack/react-query'
import { AxiosError } from 'axios'

type HttpMethod = 'POST' | 'PUT' | 'PATCH' | 'DELETE'

type MutationConfig<TData, TVariables> = {
    resourceName: string
    endpoint: string
    method?: HttpMethod
    useUnprotectedAxios?: boolean
    onMutate?: (variables: TVariables) => Promise<TVariables> | unknown
    beforeMutation?: (variables: TVariables) => Promise<TVariables>
    onSuccess?: (data: TData) => void
    onError?: (error: AxiosError<ApiError>) => void
    invalidateQueries?: string[]
    successMessage?: string
}

export const createGenericMutation = <TData, TVariables>(
    config: MutationConfig<TData, TVariables>
) => {
    return () => {
        const queryClient = useQueryClient()
        const method = config.method || 'POST'

        const axiosInstance = config.useUnprotectedAxios
            ? unprotectedAxiosInstance
            : protectedAxiosInstance

        return useMutation<TData, AxiosError<ApiError>, TVariables>({
            mutationFn: async (variables) => {
                // Run any pre-mutation operations (like image upload)
                const finalData = config.beforeMutation
                    ? await config.beforeMutation(variables)
                    : variables

                const { data } = await axiosInstance.request<Promise<TData>>({
                    method,
                    url: config.endpoint,
                    data: finalData
                })

                return data
            },
            onMutate: async (variables) => {
                return config.onMutate
                    ? await config.onMutate(variables)
                    : undefined
            },
            onSuccess: (data) => {
                if (config.invalidateQueries) {
                    config.invalidateQueries.forEach((query) =>
                        queryClient.invalidateQueries({ queryKey: [query] })
                    )
                }

                config.onSuccess?.(data)
            },
            onError: (error) => {
                config.onError?.(error)
            }
        })
    }
}


I'm guessing the main cause of the error is the exceljs package because when I remove code using it. The React-Native app works as intended. But as much as possible I dont want to use another package for generating excel reports. It can also be that my problem is unrelated to React Query. If you have any insights or possible solutions please tell me as I've been stuck with this problem for days.

  1. What I have tried was create a package where the excel file will be generated - Did not work.
  2. I have already tried downgrading the exceljs version upto 3.0.0 and React Query version to 4.6.2
  3. Removing an initailization of a React Query Hook from a specific page allows me to generate excel files but those hooks are needed so this is not an option.

Update: Was finally able to display an error. The error came from android studios log cat but I'm not sure where to go from here.

2025-02-18 19:36:07.455 6426-6426 unknown:co...agerHelper pos.kulay.pos            
E Unhandled SoftException com.facebook.react.bridge.ReactNoCrashSoftException: Cannot get UIManager because the context doesn't contain an active CatalystInstance.

at com.facebook.react.uimanager.UIManagerHelper.getUIManager(UIManagerHelper.java:76)
at com.facebook.react.uimanager.UIManagerHelper.getEventDispatcher(UIManagerHelper.java:127)
at com.facebook.react.uimanager.UIManagerHelper.getEventDispatcherForReactTag(UIManagerHelper.java:105)
at com.swmansion.rnscreens.ScreenStackHeaderConfig.onDetachedFromWindow(ScreenStackHeaderConfig.kt:98)
at android.view.View.dispatchDetachedFromWindow(View.java:21417)
at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:3957)
at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:3949)
at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:3949)
at android.view.ViewGroup.removeViewInternal(ViewGroup.java:5573)
at android.view.ViewGroup.removeViewInternal(ViewGroup.java:5544)
at android.view.ViewGroup.removeView(ViewGroup.java:5475)
at com.swmansion.rnscreens.ScreenContainer.removeView(ScreenContainer.kt:62)
at com.swmansion.rnscreens.ScreenStack.removeView(ScreenStack.kt:271)
at androidx.fragment.app.SpecialEffectsController$Operation$State.applyState(SpecialEffectsController.java:452)
at androidx.fragment.app.SpecialEffectsController$1.run(SpecialEffectsController.java:211)
at androidx.fragment.app.SpecialEffectsController$Operationplete(SpecialEffectsController.java:695)
at androidx.fragment.app.SpecialEffectsController$FragmentStateManagerOperationplete(SpecialEffectsController.java:744)
at androidx.fragment.app.SpecialEffectsController$Operation.cancel(SpecialEffectsController.java:597)
at androidx.fragment.app.SpecialEffectsController.forceCompleteAllOperations(SpecialEffectsController.java:332)
at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:3132)
at androidx.fragment.app.FragmentManager.dispatchDestroy(FragmentManager.java:3107)
at androidx.fragment.app.FragmentController.dispatchDestroy(FragmentController.java:334)
at androidx.fragment.app.FragmentActivity.onDestroy(FragmentActivity.java:330)
at androidx.appcompat.app.AppCompatActivity.onDestroy(AppCompatActivity.java:283)
at com.facebook.react.ReactActivity.onDestroy(ReactActivity.java:64)
at android.app.Activity.performDestroy(Activity.java:8599)
at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1452)
at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:5412)
at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:5458)
at android.app.servertransaction.DestroyActivityItem.execute(DestroyActivityItem.java:47)
at android.app.servertransaction.ActivityTransactionItem.execute(ActivityTransactionItem.java:45)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:179)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2307)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7924)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)

2025-02-18 19:36:07.456 6426-6426 unknown:co...agerHelper pos.kulay.pos            
E Unhandled SoftException com.facebook.react.bridge.ReactNoCrashSoftException: Cannot get UIManager because the context doesn't contain an active CatalystInstance.

at com.facebook.react.uimanager.UIManagerHelper.getUIManager(UIManagerHelper.java:76)
at com.facebook.react.uimanager.UIManagerHelper.getUIManager(UIManagerHelper.java:46)
at com.facebook.react.animated.NativeAnimatedNodesManager.handleEvent(NativeAnimatedNodesManager.java:593)
at com.facebook.react.animated.NativeAnimatedNodesManager.onEventDispatch(NativeAnimatedNodesManager.java:571)
at com.facebook.react.uimanager.events.EventDispatcherImpl.dispatchEvent(EventDispatcherImpl.java:119)
at com.swmansion.rnscreens.ScreenStackHeaderConfig.onDetachedFromWindow(ScreenStackHeaderConfig.kt:99)
at android.view.View.dispatchDetachedFromWindow(View.java:21417)
at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:3957)
at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:3949)
at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:3949)
at android.view.ViewGroup.removeViewInternal(ViewGroup.java:5573)
at android.view.ViewGroup.removeViewInternal(ViewGroup.java:5544)
at android.view.ViewGroup.removeView(ViewGroup.java:5475)
at com.swmansion.rnscreens.ScreenContainer.removeView(ScreenContainer.kt:62)
at com.swmansion.rnscreens.ScreenStack.removeView(ScreenStack.kt:271)
at androidx.fragment.app.SpecialEffectsController$Operation$State.applyState(SpecialEffectsController.java:452)
at androidx.fragment.app.SpecialEffectsController$1.run(SpecialEffectsController.java:211)
at androidx.fragment.app.SpecialEffectsController$Operationplete(SpecialEffectsController.java:695)
at androidx.fragment.app.SpecialEffectsController$FragmentStateManagerOperationplete(SpecialEffectsController.java:744)
at androidx.fragment.app.SpecialEffectsController$Operation.cancel(SpecialEffectsController.java:597)
at androidx.fragment.app.SpecialEffectsController.forceCompleteAllOperations(SpecialEffectsController.java:332)
at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:3132)
at androidx.fragment.app.FragmentManager.dispatchDestroy(FragmentManager.java:3107)
at androidx.fragment.app.FragmentController.dispatchDestroy(FragmentController.java:334)
at androidx.fragment.app.FragmentActivity.onDestroy(FragmentActivity.java:330)
at androidx.appcompat.app.AppCompatActivity.onDestroy(AppCompatActivity.java:283)
at com.facebook.react.ReactActivity.onDestroy(ReactActivity.java:64)
at android.app.Activity.performDestroy(Activity.java:8599)
at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1452)
at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:5412)
at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:5458)
at android.app.servertransaction.DestroyActivityItem.execute(DestroyActivityItem.java:47)
at android.app.servertransaction.ActivityTransactionItem.execute(ActivityTransactionItem.java:45)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:179)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2307)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7924)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论