如何将 javascript 代码翻译成 clojurescript?
How can I translate the javascript code to clojurescript?
我想使用 capacitor/app 获取我的应用程序在 iOS 上的状态(背景或活动)。我的项目基于 Clojurescript,因此有必要将以下 javascript 代码转换为 clojurescript。
- Javascript
import { App } from '@capacitor/app';
App.addListener('appStateChange', ({ isActive }) => {
console.log('App state changed. Is active?', isActive);
});
- 翻译的 clojurescript
(ns js.sample
(:require ["@capacitor/app" :refer [App]]))
(.addListener App "appStateChange"
#((fn [isActive]
(js/console.log isActive))))
我想我会得到 isActive
作为 true
或 false
,但我经常得到 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
导入一起使用。)
我想使用 capacitor/app 获取我的应用程序在 iOS 上的状态(背景或活动)。我的项目基于 Clojurescript,因此有必要将以下 javascript 代码转换为 clojurescript。
- Javascript
import { App } from '@capacitor/app';
App.addListener('appStateChange', ({ isActive }) => {
console.log('App state changed. Is active?', isActive);
});
- 翻译的 clojurescript
(ns js.sample
(:require ["@capacitor/app" :refer [App]]))
(.addListener App "appStateChange"
#((fn [isActive]
(js/console.log isActive))))
我想我会得到 isActive
作为 true
或 false
,但我经常得到 undefined
输出。我的代码有什么问题?感谢您的帮助。
(.addListener App "appStateChange"
(fn [^js event]
(js/console.log (.-isActive event))))
正如 cfrick 的评论所提到的,那里不需要 #(...)
。 #(...)
基本上只是 (fn [...] ...)
的 shorthand,你已经有一个函数了。
在 JS 中,函数签名中的 {isActive}
意味着 isActive
将被分配给传递给函数的对象的 isActive
字段的值。
^js
将其后的名称标记为包含JS 对象的名称。有必要确保像 isActive
这样的东西不会在生产构建优化期间最终被编译器重命名。在这种情况下应该没有必要,因为 isActive
名称不是您或某些库发明的东西,而是来自 JS API 的名称。但我仍然觉得描绘这样的事情是一个很好的做法。 (但是,^js
不应与 goog
导入一起使用。)