react-native - 使用 YouTube Data v3 API 调用反应原生 JSON 问题
问题描述
我有一个来自 YouTube 的请求,以创建我想在平面列表中显示的视频列表。我在整个应用程序中使用相同的方法(调用 WordPress 等),但是当我尝试使用 YouTube API 实现相同的方法时(我已经设置了密钥等),它会引发错误;
const Watch = ({typeOfProfile}) => {
const [isLoading, setLoading] = useState(true);
const [data, setData] = useState([]);
let x = {foo: 11, bar: 42};
function playertype(val) {
return 'https://www.googleapis.com/youtube/v3/searchpart=snippet&channelId=UCa_6KiOjxm6dEC_mMRP5lGA&maxResults=20&order=date&type=video&key=xxxxx';
}
useEffect(() => {
fetch(playertype(typeOfProfile))
.then((response) => response.json())
.then((json) => {
x = setData(json)
})
.catch((error) => console.error(error))
.finally(() => setLoading(false));
}, []);
const result = Object.keys(x).map(key => ({[key]: x[key]}));
return (
<View style={styles.body}>
<View style={styles.topscroll}>
{isLoading ? <ActivityIndicator/> : (
<FlatList
data={result}
horizontal={true}
keyExtractor={({ id }, index) => id}
renderItem={({ item }) => (
<View>
<Text>
{x.val}
</Text>
</View>
)}
/>
)}
</View>
</View>
);
};
有人提到它可能是返回的对象而不是数组,似乎奇怪的是 json 结构与我使用这种方法的其他请求相同。
解决方案
我发现我必须在 FlatList 的 data 属性上添加括号。所以而不是
data={data}
我也不得不改变它;
data={[data]}
立即编码;
<FlatList
data={[data]}
horizontal={true}
keyExtractor={({ id }, index) => id}
renderItem={({ item, index }) => (
<View style={styles.container}>
<Image style={styles.imgyoutubeprev} source={{ uri: chkValue(item.items[0].snippet.thumbnails.high.url) }} />
</View>
)}
/>
推荐阅读
- talend - Talend ESB 的 tMomOutput 中出现“消息无法解析或不是字段”错误
- ios - Raspberry Pi 蓝牙未在 iOS Swift 中检测到
- c++ - 如何防止 Qt 中的 currentCellChanged 信号或跳过“处理”?
- perl - Perl - 在 MIMO Base64 中解码附加到电子邮件的 pdf 会产生一个空的 pdf
- c++ - 是否可以使用默认泛型参数在 C++ 中定义 lambda?
- chef-infra - Chef-client 没有名为“source”的资源或方法
- html - 底部和顶部页面的 HTML 链接
- sql-server - SQL Server:借记卡条件交易
- angular - ResizeTextArea 角度为 5
- css - 带有对话流的 ionic3 聊天 UI