如何将 javascript 代码翻译成 clojurescript?

How can I translate the javascript code to clojurescript?

我想使用 capacitor/app 获取我的应用程序在 iOS 上的状态(背景或活动)。我的项目基于 Clojurescript,因此有必要将以下 javascript 代码转换为 clojurescript。

import { App } from '@capacitor/app';

App.addListener('appStateChange', ({ isActive }) => {
  console.log('App state changed. Is active?', isActive);
});
(ns js.sample
  (:require ["@capacitor/app" :refer [App]]))

(.addListener App "appStateChange"
                  #((fn [isActive]
                      (js/console.log isActive))))

我想我会得到 isActive 作为 truefalse,但我经常得到 undefined 输出。我的代码有什么问题?感谢您的帮助。

(.addListener App "appStateChange"
                  (fn [^js event]
                    (js/console.log (.-isActive event))))

正如 cfrick 的评论所提到的,那里不需要 #(...)#(...) 基本上只是 (fn [...] ...) 的 shorthand,你已经有一个函数了。

在 JS 中,函数签名中的 {isActive} 意味着 isActive 将被分配给传递给函数的对象的 isActive 字段的值。

CLJS 中的

^js 将其后的名称标记为包含JS 对象的名称。有必要确保像 isActive 这样的东西不会在生产构建优化期间最终被编译器重命名。在这种情况下应该没有必要,因为 isActive 名称不是您或某些库发明的东西,而是来自 JS API 的名称。但我仍然觉得描绘这样的事情是一个很好的做法。 (但是,^js 不应与 goog 导入一起使用。)