React Native 将当前幻灯片设置为状态
React Native set the current slide to state
我在我的 React 本机应用程序中使用 Swiper(它正在使用 ScrollView)。首先,我需要浏览 JSON 对象的列表,以使用地图呈现每张幻灯片。我的问题是我不确定如何将当前幻灯片信息设置为状态。顺便提一下,我正在使用 redux。
可能这应该在滚动结束时使用 onMomentumScrollEnd
实现
这是代码片段
var mySlides = [{id: 1, text: "text 1", sub: "sub 1", image: require("./img/1.jpg")}, {id: 2, text: "text 2", sub: "sub 2", image: require("./img/2.jpg")}, {id: 3, text: "text 3", sub: "sub 3", image: require("./img/3.jpg")}]
export default class extends Component {
render () {
return (
<View>
<Swiper style={styles.wrapper}
onMomentumScrollEnd={(e, state, context) => console.log('index:', state.index)}
>
{mySlides.map((slide, index) => {
return (
<View key="index" style={styles.slide}>
<Image style={styles.image} source={slide.image}>
<View style={styles.backdropView}>
<Text style={styles.text}>{slide.text}</Text>
</View>
</Image>
</View>
);
})}
</Swiper>
</View>
)
}
}
看完 Swiper
文档后,我认为您使用 onMomentumScollEnd
来跟踪当前选择的幻灯片是正确的。您可以做的是,一旦调用此函数,您就可以将 state.index
(此处的状态是 Swiper
的状态)存储到组件的状态中。然后使用存储的索引来引用幻灯片信息。
例如:
var mySlides = [{id: 1, text: "text 1", sub: "sub 1", image: require("./img/1.jpg")}, {id: 2, text: "text 2", sub: "sub 2", image: require("./img/2.jpg")}, {id: 3, text: "text 3", sub: "sub 3", image: require("./img/3.jpg")}]
export default class extends Component {
constructor() {
super();
this.state = {
index: 0
};
}
handleOnMomentumScrollEnd(e, state) {
this.setState({
index: state.index
});
}
render () {
// current slide info would be accessed by:
// const currentSlide = mySlides[this.state.index];
return (
<View>
<Swiper style={styles.wrapper}
onMomentumScrollEnd={this.handleOnMomentumScrollEnd.bind(this)}
>
{mySlides.map((slide, index) => {
return (
<View key={index} style={styles.slide}>
<Image style={styles.image} source={slide.image}>
<View style={styles.backdropView}>
<Text style={styles.text}>{slide.text}</Text>
</View>
</Image>
</View>
);
})}
</Swiper>
</View>
)
}
}
此外,作为旁注,您想使组件的 key
唯一,因此将 key="index"
更改为 key={index}
我在我的 React 本机应用程序中使用 Swiper(它正在使用 ScrollView)。首先,我需要浏览 JSON 对象的列表,以使用地图呈现每张幻灯片。我的问题是我不确定如何将当前幻灯片信息设置为状态。顺便提一下,我正在使用 redux。
可能这应该在滚动结束时使用 onMomentumScrollEnd
实现这是代码片段
var mySlides = [{id: 1, text: "text 1", sub: "sub 1", image: require("./img/1.jpg")}, {id: 2, text: "text 2", sub: "sub 2", image: require("./img/2.jpg")}, {id: 3, text: "text 3", sub: "sub 3", image: require("./img/3.jpg")}]
export default class extends Component {
render () {
return (
<View>
<Swiper style={styles.wrapper}
onMomentumScrollEnd={(e, state, context) => console.log('index:', state.index)}
>
{mySlides.map((slide, index) => {
return (
<View key="index" style={styles.slide}>
<Image style={styles.image} source={slide.image}>
<View style={styles.backdropView}>
<Text style={styles.text}>{slide.text}</Text>
</View>
</Image>
</View>
);
})}
</Swiper>
</View>
)
}
}
看完 Swiper
文档后,我认为您使用 onMomentumScollEnd
来跟踪当前选择的幻灯片是正确的。您可以做的是,一旦调用此函数,您就可以将 state.index
(此处的状态是 Swiper
的状态)存储到组件的状态中。然后使用存储的索引来引用幻灯片信息。
例如:
var mySlides = [{id: 1, text: "text 1", sub: "sub 1", image: require("./img/1.jpg")}, {id: 2, text: "text 2", sub: "sub 2", image: require("./img/2.jpg")}, {id: 3, text: "text 3", sub: "sub 3", image: require("./img/3.jpg")}]
export default class extends Component {
constructor() {
super();
this.state = {
index: 0
};
}
handleOnMomentumScrollEnd(e, state) {
this.setState({
index: state.index
});
}
render () {
// current slide info would be accessed by:
// const currentSlide = mySlides[this.state.index];
return (
<View>
<Swiper style={styles.wrapper}
onMomentumScrollEnd={this.handleOnMomentumScrollEnd.bind(this)}
>
{mySlides.map((slide, index) => {
return (
<View key={index} style={styles.slide}>
<Image style={styles.image} source={slide.image}>
<View style={styles.backdropView}>
<Text style={styles.text}>{slide.text}</Text>
</View>
</Image>
</View>
);
})}
</Swiper>
</View>
)
}
}
此外,作为旁注,您想使组件的 key
唯一,因此将 key="index"
更改为 key={index}