React Native:点击图片打开 link
React Native: Open link on image click
我有一个字典数组 arr
,其元素如下:
{url: 'https://whosebug.com/', picUrl: 'link to pic', ...}
我想在单击 i-th
图像时打开 i-th
link。我的代码如下:
arr = this.example[key];
var arrayLength = arr.length;
for(var i = 0; i < arrayLength; i++) {
console.log(arr[i]);
console.log(arr[i].url);
var x = arr[i].url;
views.push(
<View>
<ImageBackground
source={{uri: arr[i].picUrl}}
style={{ width: '100%',aspectRatio: 1, height: undefined }}>
<TouchableOpacity
onPress={() => Linking.openURL(x)}
// or onPress={() => Linking.openURL(arr[i].url)}
style={{flex: 1}}>
</TouchableOpacity>
</ImageBackground>
.....
当我点击图片时,我得到这个错误:
undefined is not an object (evaluating 'arr[i].url')
然后我验证了 arr[i] 等不是未定义的:
console.log(arr[i])
console.log(arr[i].url)
并得到正确的值(本例为 'https://whosebug.com/'
)。
当我将值硬编码为 'https://whosebug.com/'
时,一切似乎都运行良好,这意味着只有 Linking.openURL(arr[i].url)
行有问题。究竟是什么?我不知道:(
我在这个问题上纠结了很长时间,看了一些与此相关的帖子,但没有任何帮助。有人可以帮我解决这个问题吗?谢谢...
更新:
我把onPress={() => Linking.openURL(arr[i].url)}
改成了:
onPress={() => Alert.alert(arr[i])}
然后我得到一个完全空白的警报!
然后,我做了:
var x = arr[i].url
并将前面的行更改为:
onPress={() => Linking.openURL(x)}
现在,对于所有的图像,link设置为arr[length-1].url
,也就是说,它等于最后一张图像的url的值数组!
您可以先检查应用是否可以使用 canOpenURL
处理此 URL
<TouchableOpacity
onPress={() => Linking.canOpenURL(arr[i].url)
.then((supported) => {
if (!supported) {
console.log("Can't handle url: " + arr[i].url);
} else {
return Linking.openURL(arr[i].url);
}
})
.catch((err) => console.error('An error occurred', err));
}
style={{flex: 1}}>
<ImageBackground
source={{uri: arr[i].picUrl}}
style={{ width: '100%',aspectRatio: 1, height: undefined }}>
</ImageBackground>
</TouchableOpacity>
更新
您可以使用 map
、
而不是 for 循环
let views = arr.map(data => <View>
<ImageBackground
source={{uri: data.picUrl}}
style={{ width: '100%',aspectRatio: 1, height: undefined }}>
<TouchableOpacity
onPress={() => Linking.openURL(data.url)}
style={{flex: 1}}>
</TouchableOpacity>
</ImageBackground>
</View>
)
我有一个字典数组 arr
,其元素如下:
{url: 'https://whosebug.com/', picUrl: 'link to pic', ...}
我想在单击 i-th
图像时打开 i-th
link。我的代码如下:
arr = this.example[key];
var arrayLength = arr.length;
for(var i = 0; i < arrayLength; i++) {
console.log(arr[i]);
console.log(arr[i].url);
var x = arr[i].url;
views.push(
<View>
<ImageBackground
source={{uri: arr[i].picUrl}}
style={{ width: '100%',aspectRatio: 1, height: undefined }}>
<TouchableOpacity
onPress={() => Linking.openURL(x)}
// or onPress={() => Linking.openURL(arr[i].url)}
style={{flex: 1}}>
</TouchableOpacity>
</ImageBackground>
.....
当我点击图片时,我得到这个错误:
undefined is not an object (evaluating 'arr[i].url')
然后我验证了 arr[i] 等不是未定义的:
console.log(arr[i])
console.log(arr[i].url)
并得到正确的值(本例为 'https://whosebug.com/'
)。
当我将值硬编码为 'https://whosebug.com/'
时,一切似乎都运行良好,这意味着只有 Linking.openURL(arr[i].url)
行有问题。究竟是什么?我不知道:(
我在这个问题上纠结了很长时间,看了一些与此相关的帖子,但没有任何帮助。有人可以帮我解决这个问题吗?谢谢...
更新:
我把onPress={() => Linking.openURL(arr[i].url)}
改成了:
onPress={() => Alert.alert(arr[i])}
然后我得到一个完全空白的警报!
然后,我做了:
var x = arr[i].url
并将前面的行更改为:
onPress={() => Linking.openURL(x)}
现在,对于所有的图像,link设置为arr[length-1].url
,也就是说,它等于最后一张图像的url的值数组!
您可以先检查应用是否可以使用 canOpenURL
<TouchableOpacity
onPress={() => Linking.canOpenURL(arr[i].url)
.then((supported) => {
if (!supported) {
console.log("Can't handle url: " + arr[i].url);
} else {
return Linking.openURL(arr[i].url);
}
})
.catch((err) => console.error('An error occurred', err));
}
style={{flex: 1}}>
<ImageBackground
source={{uri: arr[i].picUrl}}
style={{ width: '100%',aspectRatio: 1, height: undefined }}>
</ImageBackground>
</TouchableOpacity>
更新
您可以使用 map
、
let views = arr.map(data => <View>
<ImageBackground
source={{uri: data.picUrl}}
style={{ width: '100%',aspectRatio: 1, height: undefined }}>
<TouchableOpacity
onPress={() => Linking.openURL(data.url)}
style={{flex: 1}}>
</TouchableOpacity>
</ImageBackground>
</View>
)