2015-10-02 64 views
0

我使用一些CSS动画在我的应用程序做出反应,但我有,只有一些节点动画,因为剩下的没有被重新描绘的问题,而是在渲染功能被回收。因此,他们不按预期显示CSS动画。有什么办法可以强制React重新渲染节点而不是重复使用它们?重新呈现DOM的阵营

+0

CSS动画不应该依赖渲染节点。但是,如果你的情况需要它,那么你可以使用'this.forceUpdate();'重新渲染组件。 – zvona

+0

我使用的CSS动画只有迭代计数为1,即它只发生在首次将节点加载到DOM中。 在整个渲染过程中,React似乎重用了节点,因此动画不会再运行。我会尝试'this.forceUpdate()'! –

回答

1

CSS动画取决于在课堂上或风格的变化。为了让动画发生,你需要改变其中的任何一个,这会强制反应重新渲染。所以我不希望this.forceUpdate()有所作为。

在列表中,反应再使用的部件(例如,如果你重新排序列表中的项目)。例如。如果你有一个清单:

<li>1. Cat</li> 
<li>2. Mouse</li> 
<li>3. Dog</li> 

你他们要重新排序:

<li>2. Mouse</li> 
<li>1. Cat</li> 
<li>3. Dog</li> 

阵营在默认情况下不会交换<li>项目。但更改<li>项目内的文本(因为这是更轻的DOM更新)。 要强制反应以交换项目,您需要为每个组件提供一个密钥。 反应网站的进一步说明:https://facebook.github.io/react/docs/multiple-components.html#children

如果你可以分享一些代码,这将使它更容易理解你的具体问题。

+0

你是对的。在我的情况下,我没有使用li项目,而是在父'div'内部有'div'列表。每个*都被分配一个键,因为它们是使用'.map'从一个数组中动态呈现的。我的问题是,当我改变底层数组(例如,将数组换成完全不同的数组)时,它会保留旧节点并替换其中的文本,并只渲染新节点。尽管每个节点都有一个密钥,但会发生这种情况我可以看到这是怎么可能是有用的,重复使用旧的节点,但在我的情况下,它(有时)我想要的行为相反... –

+0

如果我给节点一个唯一的ID为重点,这将迫使它重新投降? –

+0

你确定你是以正确的反应方式分配键吗? (有一个错误的方法来做到这一点,然后它不起作用)。请参阅:https://facebook.github.io/react/docs/multiple-components.html#dynamic-children,了解使用密钥的正确方法和错误方法。 – wintvelt