我对React和React Native相当陌生,正在努力保持性能,因为Im正在使用它。React本机渲染方法被称为3-5x
我在某个地方看到将一个console.log(...)
放入我的组件的方法中,这样我就可以看到它们被渲染的频率。
我为我的第一个用户看到的屏幕之一做了这个,我注意到它正在渲染3到4次。
此方法的代码定义如下,除了渲染3个部分外,什么都不做。
在下面的代码中是否有任何错误地或以非高性能的方式做,我应该采取不同的方式?例如,我在几个地方看过我绑定我的回调的方式不正确,并且会多次注册(每次渲染完成)。
另外,可以多次完成还是可以避免?
class Home extends Component {
_onRequestItemClick(id){
alert(id);
}
_onMakeRequestClick(){
this.props.dispatch(navigatePush('Create Request'));
}
render() {
console.log('Rendering Home...');
return (
<View style={styles.container}>
<View style={[styles.base,styles.halfHeight]}>
{this._renderRequestList()}
</View>
<View style={[styles.base,styles.quarterHeight]}>
{this._renderMakeRequestButton()}
</View>
<View style={[styles.quarterHeight]}>
{this._renderFulfillmentScroller()}
</View>
</View>
);
}
_renderRequestList(){
let { requests } = this.props;
return (
<RequestList
requests={requests}
onRequestItemClick={this._onRequestItemClick.bind(this)}
/>
);
}
_renderMakeRequestButton(){
return (
<ActionButton
title="Make Request"
onActionPress={this._onMakeRequestClick.bind(this)}
/>
);
}
_renderFulfillmentScroller(){
let { fulfillments } = this.props;
var onPressItem = (item)=> alert('item selected:' + item.id);
return (
<CalendarBlockScrollView
bounces={false}
style={styles.scroller}
itemStyle={styles.fulfillment}
items={fulfillments}
onPressItem={onPressItem}
/>
);
}
}
function mapDispatchToProps(dispatch) {
return {
dispatch
};
}
function mapStateToProps(state) {
return {
userId:state.get('profile').current.id,
requests:state.get('requests').all.requests,
fulfillments: state.get('fulfillments').all.fulfillments
}
}
export default connect(mapStateToProps,mapDispatchToProps)(Home);
shouldComponentUpdate – Sulthan
首先阅读[如何不使用道具绑定(https://daveceddia.com/avoid-bind-when-passing-props/ ) – stereodenis