我读组件didMount
在初始渲染时只被调用一次,但我看到它被渲染了多次。
似乎我创建了一个递归循环。
我想这就是正在发生的事情。我可能错了。
我怎样才能停止循环?
下面是以编程方式呈现子组件的代码。
function renderSubviews({viewConfigs, viewConfig, getSubviewData}) {
return viewConfig.subviewConfigs.map((subviewConfig, index) => {
let Subview = viewConfigRegistry[subviewConfig.constructor.configName]
let subviewData = getSubviewData(subviewConfig)
const key = shortid.generate()
const subviewLayout = Object.assign({}, subviewConfig.layout, {key: key})
return (
<div
key={key}
data-grid={subviewLayout}
>
<Subview
{...subviewData}
/>
</div>
)
})
}
组件实例将只装载一次,删除时将卸载。在您的情况下,它会被删除并重新创建。
key
prop的目的是帮助React查找相同组件的前一个版本。这样,它可以用新的道具更新以前的组件,而不是创建新的道具。
React通常可以在没有键的情况下正常工作,但包含项的列表除外。它希望在那里有一个键,以便在项目被重新排列、创建或删除时能够跟踪。
在您的案例中,您明确地告诉React您的组件与前一个组件不同。你给每个渲染一个新的键。这将迫使React将前一个实例视为已删除。该组件的任何子级也将被卸载和拆除。
你应该做的是不要随意生成密钥。键应该始终基于组件正在显示的数据的标识。如果不是列表项,您可能不需要密钥。如果它是一个列表项,最好使用从数据标识派生的键,如ID属性,或者多个字段的组合。
如果生成一个随机密钥是正确的做法,那么React将为您解决这个问题。
您应该将初始获取代码放在React树的根目录中,通常是App
。不要把它放在某个随机的孩子身上。至少你应该把它放在一个在你的应用生命周期内存在的组件中。
将它放在componentDidMount
中的主要原因是它不会在服务器上运行,因为服务器端组件永远不会装入。这对于通用渲染非常重要。即使你现在不这样做,你也可能以后再这样做,为此做好准备是最好的做法。
问题内容: 关于的简单代码。是SessionScoped Bean,是RequestScoped Bean 内 我的问题是被叫很多。会告诉我们该方法在什么阶段被调用。首次加载页面时,请在阶段6-进行约 5次 呼叫。该页面上有一个,因此我在其中键入一些内容,然后单击(命令按钮)。然后在阶段1-> 4期间再呼叫 12次 。每个阶段调用此方法 3-4次 。然后,此属性的get 方法的setter方法(即
编辑:由于代码剪贴不会重现错误-这里有一个指向github repo的链接:(代码远未完成) https://github.com/altruios/clicker-game 我现在已经在两台计算机上运行了它——这两台计算机都有相同的行为,而代码剪报并没有显示出来。 因此,我正在构建一个clicker游戏来学习react,我不明白为什么这段代码会以这种方式运行: 在主应用程序中,我有以下功能: 那
问题内容: ,它在它的第一个版本,也有类似的代码如下: 通过使用惰性过滤器集合,它可以过滤满足给定谓词的前5个元素(在这种情况下,可以被3整除),而不必求值数组中的 每个 元素。 但是,答案随后表明,每个元素可以多次调用’谓词(对于范围为1 … 15的元素,其谓词为3次,结果为0,则为两次)。 懒惰评估此过滤器效率低下的原因是什么?有什么方法可以避免多次评估同一元素? 问题答案: 问题所在 这里的
问题内容: 我正在使用Swift开发iOS通用应用程序,使用自动布局功能,并且仅支持纵向模式。 我发现打过多次。而是在启动MyApp时仅被调用一次。 为什么要多次调用?是否会按顺序对每个(,等)进行约束? 任何信息将不胜感激。 问题答案: 仅被调用一次:需要加载视图时。 ,但是,每个运行循环都会在已存在或已对其调用的任何视图上调用一次- 这包括每当将子视图添加到视图,滚动,调整大小等时。
下面的程序迭代一个字符串。迭代器将其在空格之间剪切,并返回每个单词。我使用for each循环来使用iterable字符串,在该循环中,我使用与外部循环中相同的迭代器对同一字符串再次迭代。输出是:hello 0 hello 2等。。。 但它应该是:你好0你好2。。。因为外部循环已经增加了迭代器的计数器。所以我想我在这张图片中遗漏了一些关于迭代器工作的东西。。。感谢您的帮助! 代码: