Context
我有一个组件,可以显示无限的帖子.我想检测第一个超过一天的元素,这样我就可以在该元素上方显示"昨天发布"的横幅(最终持续一周和一个月).
Buggy Solution
在呈现我的<;李>;但是,当我试图使用布尔状态标志来防止"昨天发布"附加到每一篇超过一天的帖子时,会出现一些奇怪的行为.
Code
无限滚动组件:
export function InfiniteFeed(props: InfiniteFeedProps) {
const [page, setPage] = useState(0);
const [shouldDisplay, setShouldDisplay] = useState(true)
const [loading, setLoading] = useState(true);
const [error, setError] = useState(false);
const [posts, setPosts] = useState<Post[]>([])
const [hasMore, setHasMore] = useState(false);
const nowMillis = DateTime.local({zone: 'utc'}).toMillis();
// have omitted dataFetching logic + ref observer logic
const timeCheck = (eventTimeMillis: number) => {
if (!shouldDisplay) {
return false
}
if (!olderThanDay(eventTimeMillis, nowMillis)) {
return false
}
setShouldDisplay(false) // setting this renders every time-check(post) to false
return true
}
return (
<div>
<FeedWrapper>
<Banner title="Infinite Feed"/>
<ul style={{padding: 0}}>
{posts.map((post, i) => (
<FeedElement
key={post.id}
ref={(post.length === i + 1) ? lastEventElementRef : () => null}
id={post.id}
display={timeCheck(post.eventTimestamp)} // if true, element prepends "posted yesterday"
// other props
/>
))}
</ul>
</FeedWrapper>
<div></div>
</div>
);
}
Behavior
如果我不使用"shouldDisplay"状态做任何事情,提要会正确地在每一篇超过一天的帖子前面加上"Posted Dayed".但是,如果我将shouldDisplay设置为false(如代码中所示),timeCheck()总是false,并且"不会显示昨天发布的内容".
Ask
这里有什么问题吗?