我之前发布了这个,但仍然很难找到合适的版本。
我想创建一个从我的应用程序到我的应用程序中的屏幕的可共享链接,并能够通过各种ID。
我的主屏幕上有一个链接,打开一个指向我的expo应用程序的链接,其中有2个参数作为查询字符串传递
const linkingUrl = 'exp://192.168.0.21:19000';
...
_handleNewGroup = async () => {
try {
const group_id = await this.createGroupId()
Linking.openURL(`${linkingUrl}?screen=camera&group_id=${group_id}`);
}catch(err){
console.log(`Unable to create group ${err}`)
}
};
同样在我的主屏幕中,我有一个处理程序,它获取当前URL并从中提取查询字符串并使用group_id
集导航到相机屏幕
async handleLinkToCameraGroup(){
Linking.getInitialURL().then((url) => {
let queryString = url.replace(linkingUrl, '');
if (queryString) {
const data = qs.parse(queryString);
if(data.group_id) {
this.props.navigation.navigate('Camera', {group_id: data.group_id});
}
}
}).catch(err => console.error('An error occurred', err));
}
有几个问题:
handleLinkToCameraGroup
会一直运行并重定向。由于URL不是http格式的URL,因此很难提取查询字符串。解析查询字符串将返回:
{ "?屏幕":"相机", " group_id":" test", }
在主屏幕中显示这个逻辑并不合适。当然这应该放在app.js文件中。但这导致并发症无法使用Linking
,因为RootStackNavigator
是app.js的孩子,所以我不相信我可以从这个文件导航?
非常感谢任何帮助澄清深层链接的最佳方法。