设置/场景
我正在使用 twitter api 来获取数据并使用 twitter 卡将其呈现反应本机社交 https://github.com/PierreCapo/react-native-socials。
推文数据 ( JSON ) 通过我的后端存储和提供,并在应用程序中呈现。
我正在使用 Flatlist 来呈现此数据。
Problem
It's working fine for the first 3 loads, I am using pullToRefresh
in flatlist
to do a network call to get new data.
但是当我第四次尝试时,它得到了undefined
元素。
我已经更换了Twitter
元素(来自react-native-socials lib)Text
元素,那么就没有undefined
在输出中并且它不会崩溃。
This undefined
是什么导致元素在尝试从传递到的 json 数据中获取特定键的地方崩溃Twitter
元素。
更重要的是,我尝试将其记录在链上,但徒劳无功。我必须走进图书馆并添加console.log
就在对象被解构和分配的地方。
相关代码
<FlatList
ref={refContainer}
data={feed}
keyExtractor={(post) => {
return post.id.toString();
}}
ListHeaderComponent={ListHeaderComponent}
renderItem={({ item }) => (
<View
style={{
padding: 10,
borderRadius: 35,
backgroundColor: colors.white,
}}
>
{item && item.type == postType.TWEET && (
<Twitter useCustomTweetExtendedData={item.content} />
)}
- 来自库的代码:
node_modules/react-native-socials/dist/src/Twitter/api.js
它出错了data.created_at
因此我添加了一个console.log
export var adapter = function (data) {
console.log("typeof : "+ typeof(data) + " full_text : " + entities.decode(data?.full_text.slice(0, 10)));
var _a, _b, _c, _d, _e, _f;
var response = {
createdAt: data.created_at,
id: data.id,
我已经尝试过的事情:
- 提供默认值 - 是否仍然出现错误
-
useEffect
for feed
- 第一次做不到loadFeed
被调用来设置feed
我在此处询问之前提到的一些文章:
- 这讨论了相当多的策略 https://dmitripavlutin.com/react-usestate-hook-guide/
问题
- 为什么错误只发生在第三次网络调用中(是的,它是一致的)? - 有足够的数据来获取至少 10 次此类调用
- 为什么它没有登录到链上?
- 我已经做了这样的检查:
{item && item.type == postType.TWEET &&
但它怎么会下降到组件并产生错误呢?
- 我该如何解决这个问题
I read this - useState 设置方法未立即反映更改 https://stackoverflow.com/a/58877875但不明白如何用它来解决我的问题。
多谢。
Update
关于 reddit 上的建议我添加了一个零拒绝者 https://stackoverflow.com/a/281335/11857690之类的事情data.filter(obj => obj)
但这似乎也没有帮助:/
我正在使用 flatlist 来渲染从后端服务器获取的完整对象数组。
我使用 Postman 检查了数据,一切正常,没有空值。
这是我的feed
加载代码。
const loadFeed = async (typeOfFeed, old = false) => {
setRefreshing(true);
let url = "";
if (old) {
url = FeedCursor.next;
}
const response = await postsApi.getPosts(typeOfFeed, url);
if (response.ok) {
if (response.data[0].id == feed[0]?.id) {
ToastAndroid.show("No new posts", ToastAndroid.SHORT);
} else if (response.data.length > 0) {
setFeedCursor({
next: response.headers.next,
previous: response.headers.previous,
});
}
response.data.filter((obj) => obj); // Updated this
setFeed(response.data);
}
} else {
ToastAndroid.show("No new posts", ToastAndroid.SHORT);
console.error(response.problem);
}
setRefreshing(false);
};
另一件事是,在发生这种情况之前,在之前的加载中它提到:
Warning: Can't perform a React state update on an unmounted component. This is a no-op, but it indicates a memory leak in your application. To fix, cancel all subscriptions and asynchronous tasks in a useEffect cleanup function.