From d5b46d51726d9a7c1aa6fa2f7adb6590400c0059 Mon Sep 17 00:00:00 2001 From: GJS <1353990812@qq.com> Date: Tue, 20 Sep 2016 15:19:37 +0800 Subject: [PATCH 1/3] allways set this.pageCount --- library/ViewPager.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/library/ViewPager.js b/library/ViewPager.js index 6257317..b689fe9 100644 --- a/library/ViewPager.js +++ b/library/ViewPager.js @@ -104,11 +104,12 @@ export default class ViewPager extends Component { render() { let dataSource = this.state.dataSource; + let list = this.props.pageDataArray; + if (!list) { + list = []; + } + this.pageCount = list.length; if (this.state.width && this.state.height) { - let list = this.props.pageDataArray; - if (!list) { - list = []; - } dataSource = dataSource.cloneWithRows(list); this.pageCount = list.length; } From 5af4ea09961f19e93794e22034566dbc78d57f13 Mon Sep 17 00:00:00 2001 From: GJS <1353990812@qq.com> Date: Tue, 20 Sep 2016 17:47:41 +0800 Subject: [PATCH 2/3] when componentDidUpdate you should compare prevProps.pageDataArray.length !== this.props.pageDataArray.length, maybe I deleted one photo\! --- library/ViewPager.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/library/ViewPager.js b/library/ViewPager.js index b689fe9..1afde3e 100644 --- a/library/ViewPager.js +++ b/library/ViewPager.js @@ -178,7 +178,7 @@ export default class ViewPager extends Component { } } - componentDidUpdate() { + componentDidUpdate(prevProps, prevState) { if (!this.initialPageSettled) { this.initialPageSettled = true; if (Platform.OS === 'ios') { @@ -187,7 +187,7 @@ export default class ViewPager extends Component { //A trick to solve bugs on Android. Delay a little setTimeout(this.scrollToPage.bind(this, this.props.initialPage, true), 0); } - } else if (this.layoutChanged) { + } else if (this.layoutChanged || prevProps.pageDataArray.length !== this.props.pageDataArray.length) { this.layoutChanged = false; if (typeof this.currentPage === 'number') { if (Platform.OS === 'ios') { From acf834e446bfc5c7ae1cd845cbd77fd212686f0c Mon Sep 17 00:00:00 2001 From: GJS <1353990812@qq.com> Date: Wed, 21 Sep 2016 17:29:19 +0800 Subject: [PATCH 3/3] if initialPage changed , then scroll to nextProps.initialPage --- .DS_Store | Bin 0 -> 6148 bytes library/ViewPager.js | 15 ++++++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..0402f1081d28d074c17df5f635afbb13aca9514e GIT binary patch literal 6148 zcmeHKOKQVF43!!~0^NAoowJc0CP zG`b@02WICYvK@y3`~Ox465dcp+QH!WL-@h0)sA^!-wXRH76AHr{n(O<)Sr^kqS_O zu>y|0H*367_SVVES+6bdcevHu;bvGn1;N`f(AzOK f){bAiDC&x>ab6RLK&K<`bRd5QOcxpzc(ejvYIha1 literal 0 HcmV?d00001 diff --git a/library/ViewPager.js b/library/ViewPager.js index 1afde3e..577b54b 100644 --- a/library/ViewPager.js +++ b/library/ViewPager.js @@ -178,6 +178,19 @@ export default class ViewPager extends Component { } } + componentWillReceiveProps(nextProps) { + if (nextProps.initialPage !== this.props.initialPage) { + if (typeof nextProps.initialPage === 'number') { + if (Platform.OS === 'ios') { + this.scrollToPage(nextProps.initialPage, true); + } else { + //A trick to solve bugs on Android. Delay a little + setTimeout(this.scrollToPage.bind(this, nextProps.initialPage, true), 0); + } + } + }; + } + componentDidUpdate(prevProps, prevState) { if (!this.initialPageSettled) { this.initialPageSettled = true; @@ -187,7 +200,7 @@ export default class ViewPager extends Component { //A trick to solve bugs on Android. Delay a little setTimeout(this.scrollToPage.bind(this, this.props.initialPage, true), 0); } - } else if (this.layoutChanged || prevProps.pageDataArray.length !== this.props.pageDataArray.length) { + } else if (this.layoutChanged) { this.layoutChanged = false; if (typeof this.currentPage === 'number') { if (Platform.OS === 'ios') {