即使我不从外部链接调用,React-native 链接 getinitialurl() 也能工作

Moh*_*Mas 5 javascript mobile-application reactjs react-native

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

当我点击浏览器中的第一个链接时,我的应用程序会运行,但之后传入的 URL 不会清除,并且linking.GetInitialUrl()始终使用该 URL 运行。

我的架构是myapp://host,我在网络上的 URL 是myapp://host/ok

我单击我的 URL 并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);
      }
Run Code Online (Sandbox Code Playgroud)

Fra*_*Xho 6

由于您getInitialURLcomponentDidMount方法中调用方法而不检查应用程序是否已加载。alert(url)每当该组件再次加载时,您就会被触发。

要解决这个问题,你必须getInitialURL在应用加载后调用永远不会再次加载的根组件。或者你可以使用一个全局变量来标记你的应用的状态是否已经加载。

if(!InMemoryData.appLoaded){
    Linking.getInitialURL().then(url => {
    this._navigate(url);
    InMemoryData.appLoaded = true;
    });  
}
Run Code Online (Sandbox Code Playgroud)