Skip to content

Commit d275ed2

Browse files
committed
Fix #181
1 parent 10c2222 commit d275ed2

2 files changed

Lines changed: 33 additions & 1 deletion

File tree

src/index.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import {
1414
GestureResponderEvent,
1515
LayoutChangeEvent,
1616
} from 'react-native';
17+
import mergeExtraData from './merge-extradata';
1718

1819
const isAndroidRTL = I18nManager.isRTL && Platform.OS === 'android';
1920

@@ -267,10 +268,14 @@ export default class AppIntroSlider<ItemT> extends React.Component<
267268
prevLabel,
268269
renderItem,
269270
data,
271+
extraData,
270272
...otherProps
271273
} = this.props;
272274
/* eslint-enable @typescript-eslint/no-unused-vars */
273275

276+
// Merge component width and user-defined extraData
277+
const extra = mergeExtraData(extraData, this.state.width);
278+
274279
return (
275280
<View style={styles.flexOne}>
276281
<FlatList
@@ -283,7 +288,7 @@ export default class AppIntroSlider<ItemT> extends React.Component<
283288
style={styles.flatList}
284289
renderItem={this._renderItem}
285290
onMomentumScrollEnd={this._onMomentumScrollEnd}
286-
extraData={this.state.width}
291+
extraData={extra}
287292
onLayout={this._onLayout}
288293
// make sure all slides are rendered so we can use dots to navigate to them
289294
initialNumToRender={data.length}

src/merge-extradata.tsx

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
function areInputsEqual(
2+
newInputs: readonly unknown[],
3+
lastInputs: readonly unknown[],
4+
): boolean {
5+
// Using for loop for speed. It generally performs better than array.every
6+
// https://github.com/alexreardon/memoize-one/pull/59
7+
for (let i = 0; i < newInputs.length; i++) {
8+
// using shallow equality check
9+
if (newInputs[i] !== lastInputs[i]) {
10+
return false;
11+
}
12+
}
13+
return true;
14+
}
15+
16+
let lastArgs: unknown[] = [];
17+
let lastResult = 0;
18+
19+
export default function mergeExtraData(...newArgs: unknown[]): number {
20+
if (areInputsEqual(newArgs, lastArgs)) {
21+
return lastResult;
22+
}
23+
// Something shallowly changed - return a new number from [0-10]
24+
lastResult = lastResult === 10 ? 0 : lastResult + 1;
25+
lastArgs = newArgs;
26+
return lastResult;
27+
}

0 commit comments

Comments
 (0)