我使用react-native-snap-carousel创建了一个旋转木马,下面是旋转木马的代码。在轮播中有选择器和textInput等。 对于渲染功能:
<Carousel
ref={(c) => { this._carousel = c; }}
data={this.state.question}
renderItem={this._renderItem}
sliderWidth={standard * 1.1}
itemWidth={standard * 0.9}
inactiveSlideScale={0.9}
inactiveSlideOpacity={0.7}
firstItem={0}
activeSlideAlignment={'center'}
containerCustomStyle={styles.slider}
contentContainerCustomStyle={styles.sliderContentContainer}
/>
详细渲染:
_renderItem ({item, index}) {
var content;
switch (item.id) {
case 1:
content = <View style={styles.carousel_cell}>
<Text style={styles.carouselItemTitle}>{item.displayLabel}</Text>
<TextInput style={styles.editor} onChangeText={(text) => this.setState({comment: text})} value={this.state.comment} />
</View>;
break;
case 2:
content = <View style={styles.carousel_cell}>
<Text style={styles.carouselItemTitle}>{item.displayLabel}</Text>
<Picker mode="dropdown"
style={styles.picker}
selectedValue={this.state.priority}
onValueChange={(itemValue) => this.onPriorityChange(itemValue)}>
{this.state.list}
</Picker>
</View>;
break;
default:
content = <View style={styles.carousel_cell}>
<Text style={styles.carouselItemTitle}>{item.displayLabel}</Text>
<Text>Unknown</Text>
</View>;
break;
}
return content;
}
对于事件触发:
onPriorityChange(value) {
this.setState({priority: value});
}
这里的问题是,在我选择Picker中的任何项目后,状态确实得到了更新,但在界面上却没有。一旦触发onChangeText事件,就会调用Picker的render函数。那时Picker中的显示也会更新。 但是,根据生命周期,当我设置状态时,不应该更新/重新渲染轮播(包括其单元格)吗?
旋转木马中的秒表(来自react-native-stopwatch-timer)会遇到同样的问题。
答案 0 :(得分:0)
我不知道这个包,但Carousel组件似乎继承了FlatList组件。
通过将extraData = {this.state}传递给FlatList,我们确保当state.selected更改时,FlatList本身将重新呈现。如果没有设置这个道具,FlatList就不会知道它需要重新渲染任何项目,因为它也是一个PureComponent,并且道具比较不会显示任何变化。
因此,请尝试将extraData={this.state}
添加到您的Carousel组件。