最近我开始使用 React 重构我的 Backbone web 应用程序,并尝试使用 react 和 sigma.js 编写交互式图形可视化组件。
我大致了解了 React 的声明式范例,以及如何使用 jsx 语法通过
但令我困惑的是,在某些情况下我无法声明定义我的 React 组件。
这是因为只有在声明式 DOM 元素由
这让我担心性能和有缺陷的动画(我的图在实例化时会进行动画处理,在这种情况下每次调用
我的当前代码如下:
我大致了解了 React 的声明式范例,以及如何使用 jsx 语法通过
render()
方法实现它。但令我困惑的是,在某些情况下我无法声明定义我的 React 组件。
这是因为只有在声明式 DOM 元素由
render()
渲染后,才能在 componentDidMount()
中生成 javascript 生成的 DOM 元素。这让我担心性能和有缺陷的动画(我的图在实例化时会进行动画处理,在这种情况下每次调用
render()
都会重新播放)。我的当前代码如下:
...
render: function() {
return (
<div class="my-graph-visualization-component">
{/*
This div is defined declaratively, so won't be re-rendered
on every `change` events* unless `React`'s diff algorithm
think it needs to be re-rendered.
*/}
<div class="my-declarative-div">{this.props.text}</div>
{/*
This div will be filled by javascript after the `render()`
call. So it will be always cleared and re-rendered on every
`change` events.
*/}
<div class="graph-container MY-PROBLEM-DIV"></div>
</div>
);
},
componentDidMount: function() {
this.props.sigmaInstance.render('.graph-container', this.props.graph);
}
...
有没有办法实现类似于
render: function() {
return (
<div class="my-graph-visualization-component">
<div class="my-declarative-div">{this.props.text}</div>
{/*
Any nice workaround to tell react not to re-render specific
DOM elements?
*/}
<div class="graph-container NO-RE-RENDER"></div>
</div>
);
},
如何避免每次状态改变时重新实例化带有相同起始动画的sigma.js图形组件?
由于似乎涉及到处理React组件的非声明性部分,因此任何解决这类问题的方法都将不胜感激。