meliorence / react-native-snap-carousel

Swiper/carousel component for React Native featuring previews, multiple layouts, parallax images, performant handling of huge numbers of items, and more. Compatible with Android & iOS.
BSD 3-Clause "New" or "Revised" License
10.3k stars 2.28k forks source link

[Help needed] Vote for React Native's feature requests so we can improve the plugin #203

Open bd-arc opened 6 years ago

bd-arc commented 6 years ago

Hey there,

We're really pleased with how the plugin has grown over the past few months: there is now a large user base and it is used in numerous apps. We're proud of that and we want to thank you all for your appreciation and for making the most out of it! :blush: You've motivated us to devote countless hours maintaining and regularly improving the plugin, and we've been happy to give back to the community.

But now we're starting to feel tired of fighting React Native's core again and again, to work around the many issues of the FlatList and ScrollView components while knowing that the next critical one is just around the corner.

Now is the time to let the React Native team know how badly we need them to improve those components! :anger: (and then we'll make the plugin even better, of course :wink:)

The main issues of the ScrollView/VirtualizedList/FlatList components are the following:

React Native has a dedicated canny for feature requests. Here are the ones that need your vote the most:

If you find other feature requests or React Native issues that are relevant, do not hesitate to list them in this thread so we can vote together as a group and help putting the focus on those.

Remember that every vote counts :fist:

batmanhit commented 6 years ago

I am doing it now.

florentroques commented 6 years ago

Done!

I added a pull request to add visibility to this issue on readme file. Another suggestion: show this issue link when a user is installing the plugin

Eyesonly88 commented 6 years ago

Done!

nadavoran commented 6 years ago

Done!

ifyapishore commented 6 years ago

+!

adamski commented 6 years ago

Done, thanks for your efforts on this!

ssssssssssss commented 6 years ago

Dear @bd-arc , I think the snapToInterval for Android has been merge to RN master last time I check. https://github.com/facebook/react-native/commit/b2848a54b05470b3e258c935dd33b8c11a31b3c3

bd-arc commented 6 years ago

Hey @ssssssssssss,

Thanks for keeping me posted. Unfortunately, I don't think that the feature has been implemented yet since two PRs address it but none has been merged so far...

bd-arc commented 6 years ago

@ssssssssssss Apparently you were right, but the feature was added in another commit: https://github.com/facebook/react-native/commit/ddd65f1ba9cca945313d116c1dcf75f3a0556099

Can't wait to see version 0.53.0 land and try it out!

Adirael commented 6 years ago

That's awesome!

Hopefully a vertical snap PR will be accepted soon. On the two PRs mentioned by @bd-arc is deemed as not as useful, but now that we have the horizontal one merged it's a good time to do the vertical too.

bd-arc commented 6 years ago

@Adirael I agree with you, and that's exactly what I said in this comment to one of the PR.

Unfortunately, if snapToAlignment and vertical handling aren't also implemented, we won't be able to really improve the plugin...

khaledwj90 commented 6 years ago

+1

bd-arc commented 5 years ago

This recent commit smells pretty good!

The version 0.58 of React Native might finally gives us the means to improve the plugin drastically. Wait and see ;-)

Titozzz commented 5 years ago

@bd-arc I linked it in the community discussion to try and get it in 0.57.4

Titozzz commented 5 years ago

@kelset gave me that link : https://github.com/facebook/react-native/commit/ef7e99c1bbc7f3a99093961bc5e7717c9e45dc79

Turns out it's already here in 0.57 @bd-arc , so what are the next steps

bd-arc commented 5 years ago

@Titozzz Well, a huge bunch of tests awaits us then! We need to see how props snapToInterval and snapToOffsets behave on both iOS and Android.

If someone wants to jump in and create a few public test cases on Snack, this would be awesome!

There is one problem though: we still don't have a proper callback mechanism. The aim is to ditch the current hacky solution altogether, but there is no way to do that until something is implemented on the native side by the Facebook team...

RWOverdijk commented 5 years ago

Update? for this

Implemented fully for both vertical and horizontal scroll views in https://github.com/facebook/react-native/commit/fd744dd56ca183933a67e8398e1d20da14a31aab. This will make it in the next release 0.58

tobiaslins commented 4 years ago

Take a look at https://github.com/CrowdLinker/react-native-pager It's made with reanimated to tackle the performance issues

Just as an inspiration for future development. Still love this library tho

RWOverdijk commented 4 years ago

Looks good. Don't appreciate the offtopic spam though.

bd-arc commented 4 years ago

@RWOverdijk I appreciate the intent ;-) A lot of goodness might come from what @tobiaslins has created though.

@tobiaslins Well, I find your plugin really interesting! Just took a look at the source code and it seems you're on your way of achieving what I've been postponing for years — see #40 and #250 if you want to know what I mean.

Quick questions:

  1. How have you addressed memory issues with huge numbers of items?
  2. Could you share your roadmap? Does it include a loop feature?
  3. Would you be interested in finding a way to "blend" our respective plugins? Obviously this needs to be discussed in length; I just want to get the temperature at this point :-)
tobiaslins commented 4 years ago

@bd-arc "Sadly" I havn't built this library. I just did a small PR and I'm using it in a new app I'm building with focus on high performance (using lot of rn-reanimated stuff)

The creator is @ajsmth maybe he can answer you this questions. Would love to see you working out something together!! Keep up the great work!

ajsmth commented 4 years ago

hey there -- i would say that the repo is still immature so please take my answers with a grain of salt

  1. a combination of slicing children to fake out "virtualization" and a ton of memoization. reanimated uses mutable nodes so child slides rerender as little as possible. i would say the ability to slice children is the most important aspect of handling larger lists, and reanimated is crucial to handling smooth animation

  2. i am in the process of building another library that uses the pager heavily, if something comes along that i absolutely need from the pager itself then i might add to it, but the core api and features are set for the time being -- my focus is on fixing bugs and issues that surface as I use it more and more. there are a couple implementations for a loop feature that i have in mind, but its not a priority right now as it's something that can be achieved with wrapper components

  3. i'm always open to discuss / chat about this!

cheers

bd-arc commented 4 years ago

@ajsmth Thanks a lot for your answers!

I'm really interested in what you've created because using such a base for this plugin would mean no more pesky FlatList bugs (🙏), better animations and, at last, some control over it.

As I see it, the tricky parts are:

You seem to have a great vision about dealing with all this. If you are, or anyone else is, interested in adding those features to your pager, I'll be more than happy to "connect the dots" with the rest and make the end result the new carousel!

Let me know what you think.

ajsmth commented 4 years ago

no problem!

from what i can tell the only missing feature from your list there is the loop feature. as i said above, i've been focused on a few other things at the moment so this will likely take some time, but it's something i'll keep in mind. if anyone else is willing to give this a shot, feel free to reach out

nihp commented 4 years ago

I have a suggestion. While scrolling from one card to another in First example gif we need to add a scroll animation too.

i.e) If we scroll a nook means it shows a scroll animation. I need that support too in my app. So we can show the scroll animation here

bd-arc commented 4 years ago

It was more than time to give this plugin a heavy lifting!

Happy to report that 90% of the job is already done. Now I need you all to test, provide feedback, and even jump in if you feel like it 😉

Click here to learn everything about the upcoming v4!

dohooo commented 2 years ago

Sorry, please allow me to advertise for my open source library! ~ I think this library react-native-reanimated-carousel will solve your problem. It is a high performance and very simple component, complete with React-Native reanimated 2

MKaidan commented 2 years ago

Discord spoke about their issues with FlatList in this blog post: https://discord.com/blog/how-discord-achieves-native-ios-performance-with-react-native

Their solution was a new, custom-made FastList component: https://gist.github.com/derekstavis/d8f6a00e14a4259224aafafab14ffd3e

Perhaps this can help you with performance and the other issues you've listed.