Scroll a page whose children can all stay mounted. Use it for an article, form or a small set of sections.

Read a page of paragraphs

tsx
import { Scroll, Text } from 'kuito';

const paragraphs = ['The tide came in.', 'It went out again.', 'Nobody noticed.'];

export default function Article() {
  return (
    <Scroll flex={1} padding={16} gap={12}>
      {paragraphs.map((paragraph) => (
        <Text key={paragraph}>{paragraph}</Text>
      ))}
    </Scroll>
  );
}

Behavior

Give the scroll view a bounded height, often with flex={1}. All children are rendered. Use List for large collections. Vertical scroll views can keep focused fields clear of the keyboard.

Props

Prop Meaning
horizontal Scroll sideways. Changing it remounts the view.
onScroll, scrollInterval { x, y, contentWidth, contentHeight, layoutWidth, layoutHeight } in points, at most once per throttle (50 ms by default).
onScrollEnd HTML's scrollend: the same fields, where it came to rest after a fling, a drag or a scrollTo, once per rest.
onReachEnd, reachEndThreshold Once each time the end comes within the threshold, in visible lengths (0.5 by default).
onRefresh, refreshing Pull-to-refresh (vertical only).
scrollbar Shows or hides the scrollbar.
motion scrollMotion(): its offset, velocity and overscroll move with the view every frame, on the UI thread (follow scrolling).
paging, snapOffsets Where a drag comes to rest: whole pages, or the offsets given.
keyboard { dismiss, persistTaps, inset, avoid }: when dragging dismisses the keyboard, what a tap outside the field does, whether content stays clear of it (true by default) (keyboard).

Continue

Read Keyboard for a complete workflow. See the complete prop reference for types and documented defaults.

Referência

Assinaturas

ts
(props: ScrollProps): KuitoElement

Parâmetros

NomeTipoObrigatórioDescrição
propsScrollPropsSim—

Devolve

KuitoElement

Props: ScrollProps

Props (incluindo props herdadas) 108

NomeTipoObrigatórioDescrição
horizontalProp<boolean>NãoScrolls sideways; changing it remounts the view, as the native axis is fixed.
refElementRef<ScrollHandle>Não—
motionScrollMotionNãoMoves with the view every frame on the UI thread: scrollMotion(), given to one view.
onScroll(event: ScrollEvent) => voidNão—
onScrollEnd(event: ScrollEndEvent) => voidNãoWhere it came to rest: after a fling, a drag or a scrollTo, once per rest.
onReachEnd(event: KuitoEvent<"reachend">) => voidNãoCalled once each time the content end comes within the threshold.
onRefresh(event: KuitoEvent<"refresh">) => voidNãoEnables pull-to-refresh.
opacityAnimatable<number>Não—
backgroundColorAnimatable<string>Não—
borderRadiusAnimatable<number>Não—
borderColorAnimatable<string>Não—
widthAnimatable<SizeValue>Não—
heightAnimatable<SizeValue>Não—
translateXAnimatable<number>Não—
translateYAnimatable<number>Não—
scaleAnimatable<number>Não—
scaleXAnimatable<number>Não—
scaleYAnimatable<number>Não—
rotateAnimatable<number>NãoDegrees.
shadowColorAnimatable<string>Não—
shadowRadiusAnimatable<number>Não—
shadowOffsetXAnimatable<number>Não—
shadowOffsetYAnimatable<number>Não—
hiddenProp<boolean>NãoTakes the view out of layout and off screen, as CSS display: none.
paddingProp<LengthPercentage>Não—
positionProp<"relative" | "absolute">Não—
childrenKuitoNodeNão—
idstringNão—
classProp<ClassNames>NãoClass names from a .css import or styles(): a string, or a list with falsy entries skipped, following the signals it reads.
styleStyleDeclarationsNãoStyles of this view alone, compiled at build time: CSS properties in camelCase. A value that changes must set a native prop (opacity).
onPress(event: PressEvent) => voidNão—
onPressCapture(event: PressEvent) => voidNão—
keystring | numberNão—
paddingTopProp<LengthPercentage>Não—
paddingRightProp<LengthPercentage>Não—
paddingBottomProp<LengthPercentage>Não—
paddingLeftProp<LengthPercentage>Não—
minWidthProp<SizeValue>Não—
maxWidthProp<SizeValue>Não—
minHeightProp<SizeValue>Não—
maxHeightProp<SizeValue>Não—
aspectRatioProp<number>NãoWidth divided by height; sizes the missing side from the other.
topProp<LengthPercentageAuto>Não—
rightProp<LengthPercentageAuto>Não—
bottomProp<LengthPercentageAuto>Não—
leftProp<LengthPercentageAuto>Não—
marginProp<LengthPercentageAuto>Não—
marginTopProp<LengthPercentageAuto>Não—
marginRightProp<LengthPercentageAuto>Não—
marginBottomProp<LengthPercentageAuto>Não—
marginLeftProp<LengthPercentageAuto>Não—
flexGrowProp<number>Não—
flexShrinkProp<number>Não—
flexBasisProp<SizeValue | "content">Não—
flexProp<number>NãoA grow factor from a zero basis, as CSS flex: n; 0 is inflexible.
alignSelfProp<"auto" | SelfAlignment>Não—
directionProp<"ltr" | "rtl">NãoThe way lines run; unset, the parent's, and the app's first language's at the root.
boxSizingProp<"border-box" | "content-box">Não—
paddingInlineStartProp<LengthPercentage>NãoPadding on the side lines start from: the left in ltr, the right in rtl.
paddingInlineEndProp<LengthPercentage>NãoPadding on the side lines end at: the right in ltr, the left in rtl.
marginInlineStartProp<LengthPercentageAuto>NãoMargin on the side lines start from: the left in ltr, the right in rtl.
marginInlineEndProp<LengthPercentageAuto>NãoMargin on the side lines end at: the right in ltr, the left in rtl.
insetInlineStartProp<LengthPercentageAuto>Nãoleft in ltr, right in rtl.
insetInlineEndProp<LengthPercentageAuto>Nãoright in ltr, left in rtl.
roleProp<Role>Não—
onAction(event: AccessibilityActionEvent) => voidNãoThe screen reader action taken, by name.
accessibleProp<boolean>NãoMakes the view one screen reader element, read as its label or its children's text.
labelProp<string>NãoWhat a screen reader says for the view.
hintProp<string>NãoWhat happens when the view is activated, read after the label.
aria-hiddenProp<boolean>NãoScreen readers skip the view and its subtree.
actionsProp<readonly AccessibilityAction[]>NãoActions a screen reader offers; onAction receives the one taken.
liveProp<"off" | "polite" | "assertive">NãoARIA's aria-live: announces changes to the view's content, on iOS too.
aria-disabledProp<boolean>Não—
aria-selectedProp<boolean>Não—
aria-checkedProp<boolean | "mixed">Não—
aria-busyProp<boolean>Não—
aria-expandedProp<boolean>Não—
aria-valueminProp<number>Não—
aria-valuemaxProp<number>Não—
aria-valuenowProp<number>Não—
aria-valuetextProp<string>Não—
gesturesreadonly Composable[]NãoThe view's gestures; several race unless composed with together or orElse.
transitionPartial<Record<"opacity" | "backgroundColor" | "transform" | "borderRadius" | "borderColor" | "shadow" | "width" | "height" | "all", Animation<unknown> | AnimationSpec>>NãoHow the animatable props move when they change, enter or leave, by group; a CSS transition compiles to it.
animatePartial<Record<AnimatableProps, string | number>>NãoAnimatable props whose every change moves as transition says; the first value applies at once.
enterEffectNãoWhere the view enters from: fade.and(slide.up(12)).
exitProp<Effect>NãoWhere the view leaves to; it stays on screen until it is there. The renderer gets true, and keeps the view until exited.
layoutAnimation<number>NãoHow the view moves to a new frame the layout gives it: layout={spring()}.
overflowProp<"visible" | "hidden" | "clip" | "scroll">Nãohidden and scroll clip; as in CSS, either lets a flex item shrink below its content.
borderWidthProp<number>Não—
backgroundGradient{ angle: number; colors: string[];}Não—
colorProp<string>Não—
sharedIdProp<string>NãoA view the navigation stack flies to the view with the same sharedId on the screen it pushes or pops to (docs/navigation.md#shared-elements).
alignItemsProp<SelfAlignment>Não—
justifyContentProp<ContentAlignment>Não—
gapProp<LengthPercentage>Não—
rowGapProp<LengthPercentage>Não—
columnGapProp<LengthPercentage>Não—
flexDirectionProp<"row" | "column" | "row-reverse" | "column-reverse">Não—
flexWrapProp<"nowrap" | "wrap" | "wrap-reverse" | "balance">Não—
flexLineCountProp<number>NãoThe minimum number of lines a wrapping container breaks into (CSS Flexbox 2).
alignContentProp<ContentAlignment>Não—
scrollIntervalProp<number>NãoAt most one scroll event per this many milliseconds; 50 by default.
reachEndThresholdProp<number>NãoDistance from the end, in visible lengths, that counts as the end; 0.5 by default.
refreshingBound<boolean>NãoShows the pull-to-refresh spinner while true.
scrollbarProp<boolean>NãoShows the scrollbar while scrolling; true by default.
pagingProp<boolean>NãoComes to rest a whole view length at a time; false by default.
snapOffsetsProp<readonly number[]>NãoOffsets in points where a drag comes to rest, besides the start and the end; ignored while paging.
keyboardProp<{ dismiss?: "none" | "on-drag" | "interactive"; persistTaps?: "never" | "always" | "handled"; inset?: boolean; avoid?: "none" | "padding" | "position";}>Não—
onScroll — assinaturas de método

Assinaturas

ts
(event: ScrollEvent): void

Parâmetros

NomeTipoObrigatórioDescrição
eventScrollEventSim—

Devolve

void

onScrollEnd — assinaturas de método

Assinaturas

ts
(event: ScrollEndEvent): void

Parâmetros

NomeTipoObrigatórioDescrição
eventScrollEndEventSim—

Devolve

void

onReachEnd — assinaturas de método

Assinaturas

ts
(event: KuitoEvent<"reachend">): void

Parâmetros

NomeTipoObrigatórioDescrição
eventKuitoEvent<"reachend">Sim—

Devolve

void

onRefresh — assinaturas de método

Assinaturas

ts
(event: KuitoEvent<"refresh">): void

Parâmetros

NomeTipoObrigatórioDescrição
eventKuitoEvent<"refresh">Sim—

Devolve

void

onPress — assinaturas de método

Assinaturas

ts
(event: PressEvent): void

Parâmetros

NomeTipoObrigatórioDescrição
eventPressEventSim—

Devolve

void

onPressCapture — assinaturas de método

Assinaturas

ts
(event: PressEvent): void

Parâmetros

NomeTipoObrigatórioDescrição
eventPressEventSim—

Devolve

void

onAction — assinaturas de método

Assinaturas

ts
(event: AccessibilityActionEvent): void

Parâmetros

NomeTipoObrigatórioDescrição
eventAccessibilityActionEventSim—

Devolve

void

backgroundGradient — campos aninhados

backgroundGradient campos

NomeTipoObrigatórioDescrição
anglenumberSim—
colorsstring[]Sim—
Gerado a partir das declarações TypeScript públicas: assinaturas, props e predefinições vêm da fonte verificada, as descrições da sua JSDoc. Nenhuma predefinição é inventada.