React-Native链接AddEventListener不起作用

时间:2016-10-08 20:33:13

标签: react-native

您好我正在尝试使用React-Native的链接库来收听链接更改,我按照https://facebook.github.io/react-native/docs/linking.html上的说明操作。我可以使用openURL打开外部URL,但Linking.addEventListener似乎不适合我。 我复制了代码段:

componentDidMount() {
  Linking.addEventListener('url', this._handleOpenURL);
},
componentWillUnmount() {
  Linking.removeEventListener('url', this._handleOpenURL);
},
_handleOpenURL(event) {
  console.log(event.url);
}

它不会给我一个错误,但是当应用打开外部网址时,不会调用_handleOpenURL。

我想知道为什么会这样,我该怎么做才能解决它?

4 个答案:

答案 0 :(得分:1)

这是因为当应用程序通过意图开始时,链接具有特定的方法。

试试这个:

componentDidMount() {
  Linking.getInitialURL().then((ev) => {
    if (ev) {
      this._handleOpenURL(ev);
    }
  }).catch(err => {
      console.warn('An error occurred', err);
  });
  Linking.addEventListener('url', this._handleOpenURL);
}

答案 1 :(得分:0)

我遇到了相同的问题,设法解决了2天。这是我的步骤,希望对下一个需要解决此问题的人有所帮助。

  1. 转到您的版本的React Native文档 (重要)-https://facebook.github.io/react-native/versions
  2. 转到链接 API文档(按照步骤操作)

就我而言,我只是添加了此方法

// iOS 9.x or newer
#import <React/RCTLinkingManager.h>

- (BOOL)application:(UIApplication *)application
   openURL:(NSURL *)url
   options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
{
  return [RCTLinkingManager application:application openURL:url options:options];
}

之后,事件监听器将正常工作。检查IOS版本是否有8.x和以下版本的代码段。

答案 2 :(得分:0)

对于从博览会中退出的任何人-您无需将此代码添加到AppDelegate(与此处的文档https://reactnative.dev/docs/0.60/linking中所述不同)。我不知道为什么会这样,而且我不确定文件为什么没有说明这一点。也许是假设您还没有退出。

    - (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity
 restorationHandler:(nonnull void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler
{
 return [RCTLinkingManager application:application
                  continueUserActivity:userActivity
                    restorationHandler:restorationHandler];
}

就这样吧

    - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler
{
  return [super application:application continueUserActivity:userActivity restorationHandler:restorationHandler];
}

一旦我将其删除,Linking.addEventListener('url', this._handleOpenURL);就开始为我工作。

答案 3 :(得分:-1)

在链接时遇到问题,然后我刚刚删除了删除的侦听器代码,然后我的代码正常工作,我的代码就是这样。