Comments (3)
My solution changing key and with same index
const [swiperIndex, setSwiperIndex] = useState(initialIndex)
const [swiperLayout, setSwiperLayout] = useState({ height: 0, width: 0 })
const onLayout = useCallback(e => {
setSwiperLayout(e.nativeEvent.layout)
}, [])
return (
<View style={styles.swiperContainer} onLayout={onLayout}>
<SwiperFlatList
key={`swipper-${swiperLayout.width}`}
index={swiperIndex}
onChangeIndex={({ index }) => setSwiperIndex(index)}
>
<View style={{ width: swiperLayout.width }}>
</View>
from react-native-swiper-flatlist.
same issue!
Look my solution. Add listener on device changes and update this values on render.
//Example class
export default class myComponent extends React.Component {
// scroll view reference
swipeRef: SwiperFlatList | null = null;
constructor(props) {
super(props);
this.state = {
currentIndex: 0,
dim: Dimensions.get('window'),
}
// bind component events
this.onOrientationScreenChange = this.onOrientationScreenChange.bind(this);
}
componentDidMount() {
// listening device dimensions change
Dimensions.addEventListener('change', this.onOrientationScreenChange);
//load initial state value
this.onOrientationScreenChange();
}
componentWillUnmount() {
// remove listening device dimensions changes
Dimensions.removeEventListener('change', this.onOrientationScreenChange);
}
/**
* Set changes on screen orientation changes
*/
onOrientationScreenChange(): void {
//Update number of columns for library render
this.setState({
dim: Dimensions.get('window'),
});
//Move swiper to initial position
this.swipeRef.scrollToIndex({index: 0, animated: true});
}
render() {
const {dim} = this.state;
return (
<SwiperFlatList
ref={instance => (this.swipeRef = instance)}
index={0}
showPagination
onMomentumScrollEnd={elem => {this.setState({currentIndex: elem.index})}}
>
<View style={{width: dim.width , height: dim.height}}>
<View style={{ backgroundColor: 'tomato', width: dim.width , height: dim.height}}>
<Text style={styles.text}>1</Text>
</View>
<View style={ { backgroundColor: 'thistle', width: dim.width , height: dim.height}}>
<Text style={styles.text}>2</Text>
</View>
<View style={ { backgroundColor: 'skyblue', width: dim.width , height: dim.height}}>
<Text style={styles.text}>3</Text>
</View>
<View style={ { backgroundColor: 'teal', width: dim.width , height: dim.height }}>
<Text style={styles.text}>4</Text>
</View>
</SwiperFlatList>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: 'white'
},
text: {
fontSize: 20,
textAlign: 'center'
}
});
from react-native-swiper-flatlist.
same issue!
Look my solution. Add listener on device changes and update this values on render.
//Example class export default class myComponent extends React.Component { // scroll view reference swipeRef: SwiperFlatList | null = null; constructor(props) { super(props); this.state = { currentIndex: 0, dim: Dimensions.get('window'), } // bind component events this.onOrientationScreenChange = this.onOrientationScreenChange.bind(this); } componentDidMount() { // listening device dimensions change Dimensions.addEventListener('change', this.onOrientationScreenChange); //load initial state value this.onOrientationScreenChange(); } componentWillUnmount() { // remove listening device dimensions changes Dimensions.removeEventListener('change', this.onOrientationScreenChange); } /** * Set changes on screen orientation changes */ onOrientationScreenChange(): void { //Update number of columns for library render this.setState({ dim: Dimensions.get('window'), }); //Move swiper to initial position this.swipeRef.scrollToIndex({index: 0, animated: true}); } render() { const {dim} = this.state; return ( <SwiperFlatList ref={instance => (this.swipeRef = instance)} index={0} showPagination onMomentumScrollEnd={elem => {this.setState({currentIndex: elem.index})}} > <View style={{width: dim.width , height: dim.height}}> <View style={{ backgroundColor: 'tomato', width: dim.width , height: dim.height}}> <Text style={styles.text}>1</Text> </View> <View style={ { backgroundColor: 'thistle', width: dim.width , height: dim.height}}> <Text style={styles.text}>2</Text> </View> <View style={ { backgroundColor: 'skyblue', width: dim.width , height: dim.height}}> <Text style={styles.text}>3</Text> </View> <View style={ { backgroundColor: 'teal', width: dim.width , height: dim.height }}> <Text style={styles.text}>4</Text> </View> </SwiperFlatList> ); } const styles = StyleSheet.create({ container: { flex: 1, backgroundColor: 'white' }, text: { fontSize: 20, textAlign: 'center' } });
I added the same workaround and it worked but I didnt tought of moving swiper to initial position. Thank you for the tips.
Another solution is to have a key with the new width to force rerender of your component
<SwiperFlatList key={getResponsiveWidth()} index={0} ref={(ref: any) => { swiperFlatListRef = ref }} showPagination={false} disableGesture={true}>
from react-native-swiper-flatlist.
Related Issues (20)
- SwiperFlatList is sliding to previous index at initial render without requesting it... HOT 6
- SwiperFlatList not swipeable in gorhom/bottom-sheet on Android HOT 3
- RenderItem is returning index always equal to 0 HOT 2
- How to move pagination (dots) above images HOT 1
- How can i get current Item Value & for the first time load all the component simultaneously HOT 1
- The index will jump to 0 on expo SDK 48 HOT 4
- On scroll to index image is shown with part of next image (Only when data length is bigger than 2) HOT 1
- Error: Requiring unknown module "undefined" HOT 3
- While given scroll to index it is not scroll to 11 it only scroll to 10 when there is 15 data or more HOT 2
- Can't make spacing between 2 sliders HOT 1
- Can't change sliding animation HOT 1
- Nested Swiper Flatlists layout bug HOT 2
- Changing the distance between the dots on Pagination HOT 1
- ScrollToIndex should be used in conjunction with getItemLayout or onScrollToIndexFailed HOT 1
- onChangeIndex called repeatedly when setState in it. HOT 3
- Issue with @types/react 18.2.22 HOT 1
- Setting children width causes glitchy behavior HOT 1
- Getting warning error on swipe left or right HOT 1
- Scrolling disrupted after the 12th item in vertical SwiperFlatList HOT 6
- How to use a Slider Component Within the Swiper? HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from react-native-swiper-flatlist.