V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  letterLim  ›  全部回复第 1 页 / 共 1 页
回复总数  15
2 天前
回复了 letterLim 创建的主题 React 请教一个 react native FlatList 的问题
const getMessageList = useMemo(() => (startPage: number, endPage: number) => {
return allMessageList
.slice(startPage * PAGE_SIZE, (endPage + 1) * PAGE_SIZE)
}, [allMessageList, PAGE_SIZE])

useEffect(() => {
setMessageList(getMessageList(0, 0))
}, [])

useEffect(() => {
if (startPage === 0 && isAtBottom) {
setMessageList(getMessageList(startPage, endPage));
}
}, [startPage, endPage, getMessageList, isAtBottom]);


const onReachTop = useCallback(() => {
console.log('onReachTop');
if (isJumpingToUnread) {
return;
}
if (startPage > 0) {
const _startPage = startPage - 1;
setStartPage(_startPage);
setMessageList(getMessageList(_startPage, endPage))
}
}, [startPage, isJumpingToUnread, endPage, getMessageList]);


const onReachBottom = useCallback(() => {
console.log('onReachBottom', isJumpingToUnread);
if (isJumpingToUnread) {
return;
}
if (messageList.length < allMessageList.length) {
setEndPage(pre => {
setMessageList(getMessageList(startPage, pre + 1))
return pre + 1
})
}
}, [messageList.length, setEndPage, startPage, allMessageList.length, isJumpingToUnread, getMessageList]);

const goUnreadMessage = useCallback(() => {
setIsJumpingToUnread(true);
setUnreadNum(0)
let _messageList: any = []
const startPage = Math.floor(unreadNum / PAGE_SIZE) > 1 ? Math.floor(unreadNum / PAGE_SIZE) - 1 : 0;
let endPage = startPage + 1;
_messageList = getMessageList(startPage, endPage)
const index = _messageList.findIndex(item => item._id === lastMessageId.current)
if (index % PAGE_SIZE === 0) {
endPage = startPage + 1
}
setStartPage(startPage);
setEndPage(endPage);
setMessageList(_messageList)
}, [allMessageList.length, getMessageList]);

useEffect(() => {
if (isJumpingToUnread && lastMessageId.current) {
const index = messageList.findIndex(item => item._id === lastMessageId.current)
if (index !== -1) {
const timer = setTimeout(() => {
clearTimeout(timer)
flatListRef.current?.scrollToIndex({
index,
animated: true,
viewPosition: 0.1,
})
}, 200)
}
}
}, [messageList.length, isJumpingToUnread]);


useEffect(() => {
if (!lastMessageId.current && allMessageList.length >= (unreadNum-1) && unreadNum) {
lastMessageId.current = allMessageList[unreadNum-1]?._id;
}
}, []);

useEffect(() => {
const initMessageList = () => {
setStartPage(0)
setEndPage(0)
setMessageList(getMessageList(0, 0))
InteractionManager.runAfterInteractions(() => {
flatListRef?.current?.scrollToOffset({ offset: 0, animated: true })
})
}
EventCenter.on('init_message_list', initMessageList)
return () => {
EventCenter.remove('init_message_list', initMessageList)
}
}, [getMessageList])


const handleScroll = useCallback((event: NativeSyntheticEvent<NativeScrollEvent>) => {
const isBottom = event.nativeEvent.contentOffset.y <= 10;
setIsAtBottom(isBottom);
}, []);

const onScrollToIndexFailed = useCallback((info: {
index: number;
highestMeasuredFrameIndex: number;
averageItemLength: number;
}) => {
const offset = info.index * info.averageItemLength
flatListRef.current?.scrollToOffset({ offset: offset, animated: true })
}, []);

const threshold = isJumpingToUnread ? 0.1 : 1

<FlatList
removeClippedSubviews
windowSize={20}
onStartReachedThreshold={threshold}
onEndReachedThreshold={threshold}
onEndReached={onReachBottom}
onStartReached={onReachTop}
onScroll={handleScroll}
scrollEventThrottle={17}
keyboardDismissMode="on-drag"
maxToRenderPerBatch={10}
initialNumToRender={10}
onTouchStart={() => {
setIsMore(false)
setEmojiKeyboardVisible(false)
}}
onScrollBeginDrag={() => {
setIsJumpingToUnread(false);
}}
maintainVisibleContentPosition={startPage && !isAtBottom ? {
minIndexForVisible: 1,
autoscrollToTopThreshold: 10
}:undefined}
onScrollToIndexFailed={onScrollToIndexFailed}
inverted
contentContainerStyle={{ paddingHorizontal: 10 }}
scrollsToTop={false}
data={messageList}
keyExtractor={item => item._id}
showsVerticalScrollIndicator
ref={flatListRef}
renderItem={renderItem}
面试算法要求高吗
29 天前
回复了 letterLim 创建的主题 Android 请教大佬们一个安卓打包 keystore 的问题
找到了 是 rn 自带的 debug.keystore.. 一直使用这个 keystore 打包会有问题吗
29 天前
回复了 letterLim 创建的主题 Android 请教大佬们一个安卓打包 keystore 的问题
还有一个问题 , 为什么我们几个不同的同事打包应用, 用户都能够正常更新呢? 如果我用的是 debug.keystore, 那别的同事打包出来的 apk 不应该是他们电脑的 bebug.keystore 吗
@haimianbihdata 主要是 web3 的东西 不敢分的太细啊哈哈哈哈
@haimianbihdata 项目在工作经历里
m3max 比 m1max 便宜三千? 哪个渠道
@nazhenhuiyi294 目前 web3 干了差不多两年。 感觉靠谱稳定的 web3 工作不是很好找
虽然做 web3 但是我也不炒币。 现在这家公司对我来说已经学不到东西了。想出去看看。
2023-09-02 17:04:12 +08:00
回复了 letterLim 创建的主题 职场话题 专升本的出路在哪
@ZhongxunXi 是以前合作过的熟人 不好意思哈
2023-09-02 15:49:42 +08:00
回复了 letterLim 创建的主题 职场话题 专升本的出路在哪
@ZhongxunXi 我是做 dapp 的
2023-09-02 15:44:59 +08:00
回复了 letterLim 创建的主题 职场话题 专升本的出路在哪
@geomancy 读研出来都 26 了 嗨 不知道前端能干到几岁
2023-09-02 14:17:12 +08:00
回复了 letterLim 创建的主题 职场话题 专升本的出路在哪
@opengps 我是但是很多公司不承认全日制专升本
2023-09-02 10:31:25 +08:00
回复了 letterLim 创建的主题 职场话题 专升本的出路在哪
@hengcheng 想过考公考编 就是怕考不上又浪费了时间
2023-09-02 10:30:55 +08:00
回复了 letterLim 创建的主题 职场话题 专升本的出路在哪
@beijinglowb 不知道对英语要求高不高 通过什么渠道找
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4076 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 19ms · UTC 10:11 · PVG 18:11 · LAX 02:11 · JFK 05:11
Developed with CodeLauncher
♥ Do have faith in what you're doing.