reactrondev / react-native-web-swiper

Swiper-Slider for React-Native and React-Native-Web

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

[Help needed] Rerender different sets of children

MaximeCrp opened this issue · comments

How can I manage to rerender different sets of children when they change?
In my project I can render set 1 of my data, then set 2 renders perfectly, but when my data change again to set 1 (or any set that has previously been rendered) it does not render again.

In this minimal snack, I do not understand why I have to use the key prop to be able to change rendering between the two example sets. But here it does render both sets in a loop. What could be different in my project?

Snack:
https://snack.expo.dev/@maximec/web-swiper-rerender

Use of library in my project:

children come from a hook, passed to a wrapper component then to Swiper

    <Swiper
      onIndexChanged={onIndexChanged}
      minDistanceForAction={0.1}
      containerStyle={styles.swiperContainer}
      innerContainerStyle={{ overflow: "visible" }}
      children={children}
      controlsProps={{
        dotsTouchable: false,
        prevPos: false,
        nextPos: false,
        dotsPos: dotsPosition,
        DotComponent: ({ index }) => (
          <DotComponent
            position={dotsPosition}
            color={getDotColorFromComponentPosition()}
            index={index}
            activeIndex={activeIndex}
            size={sizes[index]}
          />
        ),
      }}
    />

This is because the Swiper component made an internal copy of the children prop, so it does not have the auto re-render of react when children updates. By using the "key" prop makes the whole component re-mount, so the children is copied again.