即使我不从外部链接调用,React-native链接getinitialurl()仍然有效

时间:2018-05-26 08:23:34

标签: react-native

我使用链接从浏览器打开我的应用程序。

当我在浏览器中点击第一个链接时,我的应用会运行,但在此之后传入的网址不会清除,而linking.GetInitialUrl()始终使用该网址运行。

我的架构为myapp://host,网址中的我的网址为myapp://host/ok

我点击我的网址并linking.getInitialUrl()有效,但下次我回到我的屏幕时,我inking.getInitialUrl()会在没有打开网页的情况下返回我的网址。

componentDidMount() {           
        Linking.getInitialURL().then(url => {            
           if (url) {
              alert(url)
           }
         })
         .catch(err => {
           console.error(err);
         });
           Linking.addEventListener('url',this.handleOpenURL);
    }
    
    
     componentWillUnmount() {           Linking.removeEventListener('url',this.handleOpenURL);
    }
    
    handleOpenURL = (event) => { // D
        this.linkFunc(event.url);
      }

先谢谢!

1 个答案:

答案 0 :(得分:2)

因为您在getInitialURL方法中调用componentDidMount方法,而没有检查应用程序是否已加载。每当重新加载该组件时,您的alert(url)都会被触发。

要解决此问题,您必须在根组件中调用getInitialURL,该根组件将在应用加载后再也不会加载。或者您可以使用全局变量来标记应用的状态(是否为是否已加载。

if(!InMemoryData.appLoaded){
    Linking.getInitialURL().then(url => {
    this._navigate(url);
    InMemoryData.appLoaded = true;
    });  
}