【发布时间】:2019-09-12 14:15:07
【问题描述】:
在 React 中动态渲染组件是其使用的基础。这很容易做到,如下所示:
render() {
return (
<div className="blocks_loop">
{this.props.blocks.map(block => (
<div className="block" />
))}
</div>
)
}
在此示例中,您将获得与 blocks 一样多的 div 渲染。我正在尝试使用试剂来实现相同的目标,其中一部分我已在this 帖子中记录。有一些人这样做的例子,比如this 之一,但它们似乎都包括使用我不想使用的lists - 它只是不符合我的目的。我只想取出与放入的物品一样多的组件。
更新
我现在有这段代码试图遵循下面的答案,这意味着为my-map 中的每个键值对呈现 3 个 div。什么都没有渲染,它会抛出错误react-dom.development.js:507 Warning: Functions are not valid as a React child.:
(ns mapping-test.views
(:require
[re-frame.core :as re-frame]
[mapping-test.subs :as subs]))
(defn main-panel []
(def my-map {:a 1 :b 2 :c 3})
(defn a-component []
[:h1 "This is a component rendering"])
(defn my-loop [my-map]
(for [value my-map]
[a-component]))
(fn []
[my-loop my-map]))
【问题讨论】:
-
“它们只是不适用于任何严肃的应用程序”需要引用。
-
好的,也许有人用过一次,但你能回答这个问题吗? ;)
-
如果“问题”归结为“请将此 javascript 代码转换为 ClojureScript”,不,我们不会在这里这样做(没有人表现出自己的善意努力和具体的、狭隘的问题); Meta Stack Overflow 上的大量参考资料可用于此效果,请特别参阅 Is "How do I convert code from this language to this language too broad?"。显示您在 ClojureScript 中尝试过的操作以及遇到的特定故障模式。
-
(在修改此内容时——请非常明确地说明您试图避免“使用
lists”的意思,以及您期望的解决方案不这样做是为了看起来像。如果您将任何类型的序列视为列表,我不明白您将如何存储或传递可变数量的项目没有 某种存储它的序列类型)。 -
嗨@CharlesDuffy - 不,我不是在寻找任何人在这里翻译我的代码。我来自 js 背景,正在尝试学习 ClojureScript。我的观点是,通过反应(我使用的试剂显然是它的 ClojureScript 化身),有一种简单、标准且有据可查的方法,如我给出的代码示例所示。在花费大量时间尝试使用 ClojureScript 实现相同目标之后,我无法做到这一点,正如您在我链接到的帖子中看到的那样,这只是一个又一个错误。当我说
lists时,显然我不是指 Clojure 列表,我指的是 html 元素。
标签: clojure clojurescript reagent