Skip to content

Update how children are rendered to prevent state loss #102

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

YoussefHenna
Copy link

@YoussefHenna YoussefHenna commented May 9, 2023

The issue

children = (() => React.Children.toArray(this.props.children))();
The use of an anonymous function here for rendering the children effectively creates new components on every rerender of the parent. This creates an issue for example when you have a TextInput in one of the children with a hoisted state, for every character you write new components are created and all state is lost.

The Fix

This fix just takes the children from the props and renders it, which fixes this issue.

My temporary workaround

The workaround I am using at the moment is a somewhat not-so-pretty monkey patch:

 React.useEffect(() => {
    const childrenArray = React.Children.toArray(
      swiperRef.current?.props?.children
    );
    if (swiperRef.current) {
      swiperRef.current.children = childrenArray;
      swiperRef.current.count = childrenArray.length;
      swiperRef.current.forceUpdate();
    }
  }, [children]);

Where children is a variable holding the children I render inside the Swiper.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant