在没有重新渲染的情况下反应添加css类

时间:2016-09-15 11:18:37

标签: javascript reactjs

在我的项目中我有表,每行都有自己的类取决于状态。 我也有专栏,所以当我做水平滚动时,一些列是固定的。

我的问题是,当某个州正在发生变化时(例如,从none变为rejected),我需要将此行标记为rejected className并更改背景颜色。

使用setState是有问题的,因为整行都被重新渲染,因此我的粘性列已经消失(我会对每个scroll事件进行计算)。

问题是:是否有任何其他解决方案可以更改反应className而不重新渲染我的行? (除了jQuery)

2 个答案:

答案 0 :(得分:0)

更改Row组件中的状态,以便更新类。然后,在您的子组件上使用PureComponent(https://github.com/facebook/react/pull/7195),这样除非他们自己的道具发生变化,否则它们不会重新渲染。这会解决你的问题吗?

答案 1 :(得分:0)

是的,我找到了解决方案。 我的每个单元格都有自己的组件。如您所知,从数组创建的每个元素都需要fprintf道具。

key

我曾经传递过lodash的return ( <tr> {cells.map(cell => (<td key={_.uniqueId()}>{cell.val}</td>)) </tr> ) 值 - 这导致了我的问题。 解决方案是用一些uniqe字符串替换这个唯一的id,在我的情况下是两个ID和列名的组合。

所以最终解决方案如下:

_.uniqueId()

这是解释为什么它再次摧毁和重新渲染: https://facebook.github.io/react/docs/multiple-components.html#dynamic-children