callstack / callstack/react-native-pager-view
[Discussion] setPage should not trigger onPageSelected event
- Ngôn ngữ chính
- TypeScript
- Star
- 3.4k
- Fork
- 476
- Merge trung bình
- 10 ngày 21 giờ
- Pull request đã merge (30 ngày)
- 2
Mô tả
# Bug
We are storing and updating the active index of the ViewPager in Redux. When the user swipes to another page the `onPageSelected` event is correctly triggered and the active index will be updated like that:
```
setActiveIndex(nativeEvent.position)}
style={[styles.pager, { width }]}
initialPage={0}
>
```
But we also want to set the page programatically when the active index is changed by some other component. To achieve this we are using an useEffect hook like this:
```
useEffect(() => {
pager.current && pager.current.setPageWithoutAnimation(activeIndex);
}, [activeIndex]);
```
Unfortunately calling `setPageWithoutAnimation` triggers another `onPageSelected` event which updates the active index which triggers the `useEffect` hook and so on.
We think that there should be no `onPageSelected` event triggered when setting the page programatically.
## Environment info
React native info output:
```bash
System:
OS: macOS Mojave 10.14.6
CPU: (4) x64 Intel(R) Core(TM) i5-7360U CPU @ 2.30GHz
Memory: 5.96 GB / 16.00 GB
Shell: 3.2.57 - /bin/bash
Binaries:
Node: 10.16.3 - ~/.nvm/versions/node/v10.16.3/bin/node
Yarn: 1.19.1 - /usr/local/bin/yarn
npm: 6.13.1 - ~/.nvm/versions/node/v10.16.3/bin/npm
Watchman: 4.9.0 - /usr/local/bin/watchman
SDKs:
iOS SDK:
Platforms: iOS 13.2, DriverKit 19.0, macOS 10.15, tvOS 13.2, watchOS 6.1
Android SDK:
API Levels: 21, 22, 23, 24, 25, 26, 27, 28
Build Tools: 23.0.1, 25.0.2, 25.0.3, 26.0.1, 26.0.2, 26.0.3, 27.0.3, 28.0.1, 28.0.3, 29.0.2
System Images: android-19 | Google APIs Intel x86 Atom, android-21 | Google APIs Intel x86 Atom_64, android-22 | Intel x86 Atom_64, android-22 | Google APIs Intel x86 Atom_64, android-23 | Google APIs Intel x86 Atom_64, android-26 | Intel x86 Atom_64, android-27 | Google APIs Intel x86 Atom, android-28 | Google APIs Intel x86 Atom
Android NDK: 20.1.5948944
IDEs:
Android Studio: 3.5 AI-191.8026.42.35.6010548
Xcode: 11.3/11C29 - /usr/bin/xcodebuild
npmPackages:
react: 16.9.0 => 16.9.0
react-native: 0.61.5 => 0.61.5
```
Library version: 3.3.0
Hướng dẫn đóng góp
Hướng nghiên cứu
Bắt đầu bằng cách lần theo các điểm vào setPageWithoutAnimation và onPageSelected trong các triển khai React Native, iOS và Android. Tái hiện vòng lặp phản hồi đã được báo cáo, sau đó xác minh rằng các thay đổi trang bằng chương trình không còn phát onPageSelected, trong khi thao tác vuốt của người dùng vẫn cập nhật chỉ mục đang hoạt động.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- android, ios, react-native, typescript
- Lĩnh vực
- mobile
- Loại issue
- Lỗi
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 35/100