如何在clojurescript中为本机对象自定义打印功能

走开

我想自定义一个react元素的显示方式,这是代码:

(require ["react" :as react])    

(defn react-element? [obj]
  (if-let [sym (aget obj "$$typeof")]
    (= js/Symbol
       (type sym))))

(extend-protocol IPrintWithWriter
  object
  (-pr-writer [obj writer _]
    (js/console.log "hello")
    (cond (react-element? obj)
          (write-all writer
                     (-> (js->clj obj)
                         (dissoc "$$typeof")
                         str))

          :else
          (write-all writer (str obj)))))

(react/createElement "h2" nil "Hello, World!")

我期望输出是

{:type "h2", :key nil, :ref nil, :props {:children "Hello, World!"}}}

但它仍会打印出正常的#js元素:

#js {"$$typeof" Symbol(react.element), 
     :type "h2", :key nil, :ref nil, 
     :props #js {:children "Hello, World!"}, :_owner nil}

是否可以自定义此行为?

迈克·菲克斯

根本原因是在标准lib打印代码中,implements?已使用和satisfies?未使用。这有效地将打印替代项限制为非本机类型的内容。implements?不适用于本机类型)。

这可能不是故意的,并且可以通过https://dev.clojure.org/jira/browse/CLJS-2812进行修复

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Typescript中打印自定义对象的属性?

如何在python中打印自定义对象的数组?

在R中,如何从自定义打印功能可靠地打印对象的名称?

如何在R中为S4对象创建自定义打印方法

如何在 Angular 中“扩展”和包装自定义组件或本机元素?(以 React 为例)

为clojurescript添加自定义打印方法

如何在 Power Apps 中为收集功能定义自定义列?

如何在Scalacheck中为自定义列表定义任意对象?

如何在PyCharm中为自定义模块启用代码完成功能?

如何在 C++ 中为自定义生成器实现重置功能?

如何在C ++中对包含自定义对象的容器使用分区功能

如何在自定义排序功能中对对象的特定属性实施排序?

如何在Racket中自定义程序的打印?

如何在Intershop7.9中为自定义对象创建数据库表

如何在JavaScript中为自定义对象创建方法?

如何在Python中为字符串对象提供自定义方法?

如何在自定义类对象中为动态数组使用DefineProperties-Delphi

如何在 c# WPF 中为自定义形状对象设置动画

如何在Laravel中编写自定义登录功能

如何在JavaFX的TableView中自定义setCellValueFactory的功能

如何在bash文件中创建自定义功能

如何在管理表单中添加自定义功能?

如何在 VueJS 中创建自定义搜索功能?

如何在zsh中为自定义完成功能的路径添加自动完成功能?

如何获得同时打印对象地址和自定义toString的功能

如何在Wordpress中为TinyMCE自定义fontsizeselect?

如何在 Cassandra 中存储自定义对象?

如何在GraphQL中创建自定义对象列表

如何在Bundle中传递自定义对象?