在react native使用<ListView><FlatList><SectionList>等组件列表时,经常会报错this.**不是一个方法,然而我们明明已经声明了该方法,这是因为在该组件中的this并不是你的class中的this。例如我在使用FlatList渲染一个组件:
<FlatList ref={ref=>flatList=ref} keyExtractor = {(item, index) => index.toString()} data={this.state.rowNews} //数据源 renderItem={this.renderItem} //定义每条数据的渲染方法 />其中通过this.renderItem方法来渲染每条数据:
renderItem(item){ return( <TouchableOpacity activeOpacity={0.5} onPress={()=>this.showDetail()}> <View style={styles.newsItem}> <Image style={styles.newsImg} source={{uri:item.item.imgsrc}} /> <View style={styles.newsText}> <Text style={styles.newsTitle}>{item.item.title}</Text> <Text style={styles.newsDigest}>{item.item.digest}</Text> </View> </View> </TouchableOpacity> ) }
我在每条数据被点击时,调用this.showDetail方法,这时会报错this.showDetail is not a function,这是因为这个this指代错误,这时候需要在调用renderItem时绑定this:
renderItem={this.renderItem.bind(this)}这样在组件内onPress调用方法时就不会报错了