/
githubmirror
/
react-native
Обзор
Документация
Войти
/
githubmirror
/
react-native
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
packages/rn-tester/js/examples/SectionList/SectionList-BaseOnViewableItemsChanged.js
75 строк
2 KB
Sam Zhou
Replace `React.ElementProps` in tests and examples (#54035)
02 окт 2025, 23:48
02 окт 2025, 23:48
36a9b7e
Код
Авторство
О чём код?
/** * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @flow * @format */ import type { ViewabilityConfig, ViewToken, } from 'react-native/Libraries/Lists/ViewabilityHelper'; import SectionListBaseExample from './SectionListBaseExample'; import * as React from 'react'; import {useRef, useState} from 'react'; import {StyleSheet, View} from 'react-native'; const BASE_VIEWABILITY_CONFIG = { minimumViewTime: 1000, viewAreaCoveragePercentThreshold: 100, }; export function SectionList_BaseOnViewableItemsChanged(props: { offScreen?: ?boolean, horizontal?: ?boolean, useScrollRefScroll?: ?boolean, waitForInteraction?: ?boolean, }): React.Node { const {offScreen, horizontal, useScrollRefScroll, waitForInteraction} = props; const [output, setOutput] = useState(''); const viewabilityConfig: ViewabilityConfig = { ...BASE_VIEWABILITY_CONFIG, waitForInteraction: waitForInteraction ?? false, }; const exampleProps = { onViewableItemsChanged: (info: { changed: Array<ViewToken>, viewableItems: Array<ViewToken>, ... }) => setOutput( info.viewableItems .filter(viewToken => viewToken.index != null && viewToken.isViewable) .map(viewToken => viewToken.item) .join(', '), ), viewabilityConfig, horizontal, }; const ref = useRef<any>(null); const onTest = useScrollRefScroll === true ? () => { ref?.current?.getScrollResponder()?.scrollToEnd(); } : null; return ( <SectionListBaseExample ref={ref} exampleProps={exampleProps} onTest={onTest} testOutput={output}> {offScreen === true ? <View style={styles.offScreen} /> : null} </SectionListBaseExample> ); } const styles = StyleSheet.create({ offScreen: { height: 1000, }, });