如何在 expo + react-native 初始化阶段 运行 clojurescript 函数?

How to run a clojurescript function during expo + react-native initialization phase?

我正在使用 expo-cljs 模板 (lein new expo myapp +reagent) bootstrap 我的 expo/react-native/reagent/clojurescript 应用程序。

因为我的应用程序需要地理围栏,并且在需要 TaskManager 的 expo 中,我定义了一个 TaskManager 任务,如下所示:

(ns myapp.mod
    (:require [oops.core :refer [ocall]])) ; javascript interop

(def taskmanager (js/require "expo-task-manager"))

; call outside of component as per react-native requirement
; to be done during initialization phase
(ocall taskmanager "defineTask" "task-name" (fn [data error] (prn "nowt")))

我很早就在我的应用程序中得到了这个 运行ning,甚至在需要图像之前。但我一直收到 TaskManager.defineTask must be called during initialization phase! 错误,运行 figwheel dev-mode。如果 clojurescript 的顶层和底层不是初始化阶段,那么什么时候是?我的 clojurescript 之前有 运行 吗?我还尝试在 init 函数和 app-root 中调用它作为试剂类型 3 组件。

版本信息:expo "^34.0.3", react "16.8.3", react-native "34.0.0", expo-task-manager "~6.0.0", reagent “0.8.1”

问题在于 re-natal/figwheel 中使用的初始化机制。

它首先加载一个简单的 bridge 辅助 JS 文件,该文件不包含您自己的任何代码。它只是设置初始加载过程。此代码是异步加载的,完成后它将呈现您的实际应用代码,以替换它最初使用的占位符。

我不知道有什么方法可以像 expo 期望的 re-natal/figwheel.

那样以同步方式实际 运行 您的代码

您可以尝试 shadow-cljs 没有这个异步问题。