如何使用 flux/reactjs 减少控制器视图中的渲染调用
How to decrease render calls in controller view with flux/reactjs
我正在从事 React Flux 架构的项目。
我的控制器视图看起来像
var MyComponent = React.createClass({
getInitialState: function() {
return MyStore.getData();
},
render: function() {
return <ul className="navigation">
<UserControl/>
<NavigationBar change={this._onChange} messageCounter={this.state.data.score}/>
</ul>
},
_onChange: function() {
this.setState(Store.getData());
}
});
我在渲染函数中有一些嵌套视图,在某些视图中所做的每个更改都会导致控制器视图渲染函数 运行。
这会导致所有嵌套组件的渲染功能也变为 运行,但唯一的变化将发生在 UserControl 组件上。我不需要所有嵌套组件的渲染函数到 运行.
我该如何解决?
它是通量架构的行为吗?
如何减少渲染函数调用的次数?
简短的回答是覆盖 shouldComponentUpdate 方法:
http://facebook.github.io/react/docs/component-specs.html#updating-shouldcomponentupdate
shouldComponentUpdate: function(nextProps, nextState) {
return nextProps.id !== this.props.id;
}
该方法接收状态和道具更新,因此您可以确定该组件的任何数据是否已更改。如果不是,return false,该组件将不会呈现。
更重要的是,您真的需要担心那些额外的渲染吗?如果您没有看到真正的性能问题,我会保留它。这是 React 处理 DOM 操作的主要优势之一。如果组件呈现,并且没有任何变化,DOM 将保持不变。
我正在从事 React Flux 架构的项目。 我的控制器视图看起来像
var MyComponent = React.createClass({
getInitialState: function() {
return MyStore.getData();
},
render: function() {
return <ul className="navigation">
<UserControl/>
<NavigationBar change={this._onChange} messageCounter={this.state.data.score}/>
</ul>
},
_onChange: function() {
this.setState(Store.getData());
}
});
我在渲染函数中有一些嵌套视图,在某些视图中所做的每个更改都会导致控制器视图渲染函数 运行。 这会导致所有嵌套组件的渲染功能也变为 运行,但唯一的变化将发生在 UserControl 组件上。我不需要所有嵌套组件的渲染函数到 运行.
我该如何解决?
它是通量架构的行为吗?
如何减少渲染函数调用的次数?
简短的回答是覆盖 shouldComponentUpdate 方法: http://facebook.github.io/react/docs/component-specs.html#updating-shouldcomponentupdate
shouldComponentUpdate: function(nextProps, nextState) {
return nextProps.id !== this.props.id;
}
该方法接收状态和道具更新,因此您可以确定该组件的任何数据是否已更改。如果不是,return false,该组件将不会呈现。
更重要的是,您真的需要担心那些额外的渲染吗?如果您没有看到真正的性能问题,我会保留它。这是 React 处理 DOM 操作的主要优势之一。如果组件呈现,并且没有任何变化,DOM 将保持不变。