Skip to content
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

Failing test and future fix of issue #10912 #10932

Draft
wants to merge 3 commits into
base: dev
Choose a base branch
from

Conversation

johnsonjo4531
Copy link

See #10912

For now I created a failing test for the new
version of React Native's linking api.
This test ensures that the listeners are cleaned
up properly using the remove method of the new subscription
based Linking.addEventListener function.
The old api is outlined as deprecated here:
https://github.com/facebook/react-native/blob/main/CHANGELOG-pre-070.md#deprecated-2 I am also planning on submitting the
bug-fix soon.

With the fix I assume the new API of
React-Native is all that would work for
future versions of react-router-native if
that's not what react-router
maintainers want this then you may want
to take a different approach than the code
below and the bug-fix I will create soon,
but if it is what react-router wants
then we will just need to update two
lines in react-router-native/index.tsx

In this function:

export function useDeepLinking() {
  // ... code elided for brevity ...

  // Listen for URL changes
  React.useEffect(() => {
    // ... code elided ...

    Linking.addEventListener(URLEventType, handleURLChange);

    return () => {
      Linking.removeEventListener(URLEventType, handleURLChange);
    };
  }, [navigate]);
}

From this:

    Linking.addEventListener(URLEventType, handleURLChange);

    return () => {
      Linking.removeEventListener(URLEventType, handleURLChange);
    };

To this:

    const subscription = Linking.addEventListener(URLEventType, handleURLChange);

    return () => {
      subscription.remove();
    };

This change will pass the tests.

See remix-run#10912

For now I created a failing test for the new
version of React Native's linking api.
This test ensures that the listeners are cleaned up properly
using the remove method of the new subscription
based Linking.addEventListener function.
The old api is outlined as deprecated here:
https://github.com/facebook/react-native/blob/main/CHANGELOG-pre-070.md#deprecated-2
I am also planning on submitting the
bug-fix soon.

With the fix I assume the new API of
React-Native is all that would work for
future versions of `react-router-native` if
that's not what `react-router`
maintainers want this then you may want
to take a different approach than the code
below and the bug-fix I will create soon,
but if it is what react-router wants
then we will just need to update two
lines in react-router-native/index.tsx

In this function:

```tsx
export function useDeepLinking() {
  // ... code elided for brevity ...

  // Listen for URL changes
  React.useEffect(() => {
    // ... code elided ...

    Linking.addEventListener(URLEventType, handleURLChange);

    return () => {
      Linking.removeEventListener(URLEventType, handleURLChange);
    };
  }, [navigate]);
}
```

From this:

```tsx
    Linking.addEventListener(URLEventType, handleURLChange);

    return () => {
      Linking.removeEventListener(URLEventType, handleURLChange);
    };
```

To this:

```tsx
    const subscription = Linking.addEventListener(URLEventType, handleURLChange);

    return () => {
      subscription.remove();
    };
```

This change will pass the tests.
@changeset-bot
Copy link

changeset-bot bot commented Oct 12, 2023

⚠️ No Changeset found

Latest commit: ab92dd9

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@remix-cla-bot
Copy link
Contributor

remix-cla-bot bot commented Oct 12, 2023

Hi @johnsonjo4531,

Welcome, and thank you for contributing to React Router!

Before we consider your pull request, we ask that you sign our Contributor License Agreement (CLA). We require this only once.

You may review the CLA and sign it by adding your name to contributors.yml.

Once the CLA is signed, the CLA Signed label will be added to the pull request.

If you have already signed the CLA and received this response in error, or if you have any questions, please contact us at hello@remix.run.

Thanks!

- The Remix team

@remix-cla-bot
Copy link
Contributor

remix-cla-bot bot commented Oct 12, 2023

Thank you for signing the Contributor License Agreement. Let's get this merged! 🥳

@johnsonjo4531
Copy link
Author

Unsure how I should do the changeset and semver for this change. I could use a little direction. Thanks.

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

Successfully merging this pull request may close these issues.

None yet

1 participant