{"_path":"/frontend/react-native/preserve-flatlist-scroll-position-in-react-native","_dir":"react-native","_draft":false,"_partial":false,"_locale":"en","_empty":false,"title":"Preserve FlatList Scroll Position In React Native","description":"Sometimes you need to keep scroll position of FlatList in React Native after some user interactions.","excerpt":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Sometimes you need to keep scroll position of "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"FlatList"}]},{"type":"text","value":" in React Native after some user interactions."}]},{"type":"element","tag":"code","props":{"code":"// interact() is doing some stuff, that changes FlatList scroll size\ntype Props = { interact: () => void; }\n\nconst SomeList: FC<Props> = ({ interact }) => {\n  const scrollPosition = useRef(0);\n  const scrollHeight = useRef(0);\n  \n  // set it to `true` before interaction and back to `false` right after\n  const shouldKeepScrollPosition = useRef(false);\n\n  const onScroll = useCallback(\n    (event: NativeSyntheticEvent<NativeScrollEvent>) => {\n      scrollPosition.current = event.nativeEvent.contentOffset.y;\n    },\n    [],\n  );\n\n  const onContentSizeChange = useCallback((_: number, h: number) => {\n    if (!shouldKeepScrollPosition.current) {\n      scrollHeight.current = h;\n      return;\n    }\n\n    ref.current?.scrollToOffset({\n      offset: scrollPosition.current + (h - scrollHeight.current),\n      animated: false,\n    });\n\n    scrollHeight.current = h;\n  }, []);\n\n  // onInteraction wraps interaction to preserve scroll position\n  const onInteraction = useCallback(\n    () => {\n      shouldKeepScrollPosition.current = true;\n\n      setTimeout(() => {\n        interact();\n      }, 0);\n\n      setTimeout(() => {\n        shouldKeepScrollPosition.current = false;\n      }, 500);\n    },\n    [setSelectedSubThemes],\n  );\n  \n  return (\n    <FlatList\n      // ...required FlatList options\n      ref={ref}\n      onContentSizeChange={onContentSizeChange}\n      onRefresh={onRefresh}\n      onScroll={onScroll}\n    />\n  )\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"text","value":"// interact() is doing some stuff, that changes FlatList scroll size\ntype Props = { interact: () => void; }\n\nconst SomeList: FC<Props> = ({ interact }) => {\n  const scrollPosition = useRef(0);\n  const scrollHeight = useRef(0);\n  \n  // set it to `true` before interaction and back to `false` right after\n  const shouldKeepScrollPosition = useRef(false);\n\n  const onScroll = useCallback(\n    (event: NativeSyntheticEvent<NativeScrollEvent>) => {\n      scrollPosition.current = event.nativeEvent.contentOffset.y;\n    },\n    [],\n  );\n\n  const onContentSizeChange = useCallback((_: number, h: number) => {\n    if (!shouldKeepScrollPosition.current) {\n      scrollHeight.current = h;\n      return;\n    }\n\n    ref.current?.scrollToOffset({\n      offset: scrollPosition.current + (h - scrollHeight.current),\n      animated: false,\n    });\n\n    scrollHeight.current = h;\n  }, []);\n\n  // onInteraction wraps interaction to preserve scroll position\n  const onInteraction = useCallback(\n    () => {\n      shouldKeepScrollPosition.current = true;\n\n      setTimeout(() => {\n        interact();\n      }, 0);\n\n      setTimeout(() => {\n        shouldKeepScrollPosition.current = false;\n      }, 500);\n    },\n    [setSelectedSubThemes],\n  );\n  \n  return (\n    <FlatList\n      // ...required FlatList options\n      ref={ref}\n      onContentSizeChange={onContentSizeChange}\n      onRefresh={onRefresh}\n      onScroll={onScroll}\n    />\n  )\n}\n"}]}]}]}]},"body":{"type":"root","children":[{"type":"element","tag":"p","props":{},"children":[{"type":"text","value":"Sometimes you need to keep scroll position of "},{"type":"element","tag":"code-inline","props":{},"children":[{"type":"text","value":"FlatList"}]},{"type":"text","value":" in React Native after some user interactions."}]},{"type":"element","tag":"code","props":{"code":"// interact() is doing some stuff, that changes FlatList scroll size\ntype Props = { interact: () => void; }\n\nconst SomeList: FC<Props> = ({ interact }) => {\n  const scrollPosition = useRef(0);\n  const scrollHeight = useRef(0);\n  \n  // set it to `true` before interaction and back to `false` right after\n  const shouldKeepScrollPosition = useRef(false);\n\n  const onScroll = useCallback(\n    (event: NativeSyntheticEvent<NativeScrollEvent>) => {\n      scrollPosition.current = event.nativeEvent.contentOffset.y;\n    },\n    [],\n  );\n\n  const onContentSizeChange = useCallback((_: number, h: number) => {\n    if (!shouldKeepScrollPosition.current) {\n      scrollHeight.current = h;\n      return;\n    }\n\n    ref.current?.scrollToOffset({\n      offset: scrollPosition.current + (h - scrollHeight.current),\n      animated: false,\n    });\n\n    scrollHeight.current = h;\n  }, []);\n\n  // onInteraction wraps interaction to preserve scroll position\n  const onInteraction = useCallback(\n    () => {\n      shouldKeepScrollPosition.current = true;\n\n      setTimeout(() => {\n        interact();\n      }, 0);\n\n      setTimeout(() => {\n        shouldKeepScrollPosition.current = false;\n      }, 500);\n    },\n    [setSelectedSubThemes],\n  );\n  \n  return (\n    <FlatList\n      // ...required FlatList options\n      ref={ref}\n      onContentSizeChange={onContentSizeChange}\n      onRefresh={onRefresh}\n      onScroll={onScroll}\n    />\n  )\n}\n","language":"typescript"},"children":[{"type":"element","tag":"pre","props":{},"children":[{"type":"element","tag":"code","props":{"__ignoreMap":""},"children":[{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-ad7381"},"children":[{"type":"text","value":"// interact() is doing some stuff, that changes FlatList scroll size"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-b3a4e1"},"children":[{"type":"text","value":"type"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1547e2"},"children":[{"type":"text","value":"Props"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-980a4a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":" { "}]},{"type":"element","tag":"span","props":{"class":"ct-b01c6a"},"children":[{"type":"text","value":"interact"}]},{"type":"element","tag":"span","props":{"class":"ct-980a4a"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":" () "}]},{"type":"element","tag":"span","props":{"class":"ct-b3a4e1"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f8200d"},"children":[{"type":"text","value":"void"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"; }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-e25281"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-896bd7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1ce468"},"children":[{"type":"text","value":"SomeList"}]},{"type":"element","tag":"span","props":{"class":"ct-384f36"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-896bd7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-db26db"},"children":[{"type":"text","value":"FC"}]},{"type":"element","tag":"span","props":{"class":"ct-896bd7"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-db26db"},"children":[{"type":"text","value":"Props"}]},{"type":"element","tag":"span","props":{"class":"ct-896bd7"},"children":[{"type":"text","value":"> "}]},{"type":"element","tag":"span","props":{"class":"ct-384f36"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-896bd7"},"children":[{"type":"text","value":" ({ "}]},{"type":"element","tag":"span","props":{"class":"ct-003f45"},"children":[{"type":"text","value":"interact"}]},{"type":"element","tag":"span","props":{"class":"ct-896bd7"},"children":[{"type":"text","value":" }) "}]},{"type":"element","tag":"span","props":{"class":"ct-e25281"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-896bd7"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"  "}]},{"type":"element","tag":"span","props":{"class":"ct-b3a4e1"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-aa5df8"},"children":[{"type":"text","value":"scrollPosition"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-980a4a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b01c6a"},"children":[{"type":"text","value":"useRef"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-d7040a"},"children":[{"type":"text","value":"0"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"  "}]},{"type":"element","tag":"span","props":{"class":"ct-b3a4e1"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-aa5df8"},"children":[{"type":"text","value":"scrollHeight"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-980a4a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b01c6a"},"children":[{"type":"text","value":"useRef"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-d7040a"},"children":[{"type":"text","value":"0"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"  "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"  "}]},{"type":"element","tag":"span","props":{"class":"ct-ad7381"},"children":[{"type":"text","value":"// set it to `true` before interaction and back to `false` right after"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"  "}]},{"type":"element","tag":"span","props":{"class":"ct-b3a4e1"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-aa5df8"},"children":[{"type":"text","value":"shouldKeepScrollPosition"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-980a4a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b01c6a"},"children":[{"type":"text","value":"useRef"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"("}]},{"type":"element","tag":"span","props":{"class":"ct-777784"},"children":[{"type":"text","value":"false"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"  "}]},{"type":"element","tag":"span","props":{"class":"ct-b3a4e1"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-aa5df8"},"children":[{"type":"text","value":"onScroll"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-980a4a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b01c6a"},"children":[{"type":"text","value":"useCallback"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-896bd7"},"children":[{"type":"text","value":"    ("}]},{"type":"element","tag":"span","props":{"class":"ct-003f45"},"children":[{"type":"text","value":"event"}]},{"type":"element","tag":"span","props":{"class":"ct-384f36"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-896bd7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-db26db"},"children":[{"type":"text","value":"NativeSyntheticEvent"}]},{"type":"element","tag":"span","props":{"class":"ct-896bd7"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-db26db"},"children":[{"type":"text","value":"NativeScrollEvent"}]},{"type":"element","tag":"span","props":{"class":"ct-896bd7"},"children":[{"type":"text","value":">) "}]},{"type":"element","tag":"span","props":{"class":"ct-e25281"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-896bd7"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"      "}]},{"type":"element","tag":"span","props":{"class":"ct-f80776"},"children":[{"type":"text","value":"scrollPosition"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-f80776"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-980a4a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f80776"},"children":[{"type":"text","value":"event"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-f80776"},"children":[{"type":"text","value":"nativeEvent"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-f80776"},"children":[{"type":"text","value":"contentOffset"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-f80776"},"children":[{"type":"text","value":"y"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"    },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"    [],"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"  );"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-896bd7"},"children":[{"type":"text","value":"  "}]},{"type":"element","tag":"span","props":{"class":"ct-e25281"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-896bd7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-5f62b3"},"children":[{"type":"text","value":"onContentSizeChange"}]},{"type":"element","tag":"span","props":{"class":"ct-896bd7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-384f36"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-896bd7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-1ce468"},"children":[{"type":"text","value":"useCallback"}]},{"type":"element","tag":"span","props":{"class":"ct-896bd7"},"children":[{"type":"text","value":"(("}]},{"type":"element","tag":"span","props":{"class":"ct-003f45"},"children":[{"type":"text","value":"_"}]},{"type":"element","tag":"span","props":{"class":"ct-384f36"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-896bd7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-001dc3"},"children":[{"type":"text","value":"number"}]},{"type":"element","tag":"span","props":{"class":"ct-896bd7"},"children":[{"type":"text","value":", "}]},{"type":"element","tag":"span","props":{"class":"ct-003f45"},"children":[{"type":"text","value":"h"}]},{"type":"element","tag":"span","props":{"class":"ct-384f36"},"children":[{"type":"text","value":":"}]},{"type":"element","tag":"span","props":{"class":"ct-896bd7"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-001dc3"},"children":[{"type":"text","value":"number"}]},{"type":"element","tag":"span","props":{"class":"ct-896bd7"},"children":[{"type":"text","value":") "}]},{"type":"element","tag":"span","props":{"class":"ct-e25281"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-896bd7"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"    "}]},{"type":"element","tag":"span","props":{"class":"ct-980a4a"},"children":[{"type":"text","value":"if"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-980a4a"},"children":[{"type":"text","value":"!"}]},{"type":"element","tag":"span","props":{"class":"ct-f80776"},"children":[{"type":"text","value":"shouldKeepScrollPosition"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-f80776"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":") {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"      "}]},{"type":"element","tag":"span","props":{"class":"ct-f80776"},"children":[{"type":"text","value":"scrollHeight"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-f80776"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-980a4a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f80776"},"children":[{"type":"text","value":"h"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"      "}]},{"type":"element","tag":"span","props":{"class":"ct-980a4a"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"    }"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"    "}]},{"type":"element","tag":"span","props":{"class":"ct-f80776"},"children":[{"type":"text","value":"ref"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-f80776"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"?."}]},{"type":"element","tag":"span","props":{"class":"ct-b01c6a"},"children":[{"type":"text","value":"scrollToOffset"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"({"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"      offset: "}]},{"type":"element","tag":"span","props":{"class":"ct-f80776"},"children":[{"type":"text","value":"scrollPosition"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-f80776"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-980a4a"},"children":[{"type":"text","value":"+"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":" ("}]},{"type":"element","tag":"span","props":{"class":"ct-f80776"},"children":[{"type":"text","value":"h"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-980a4a"},"children":[{"type":"text","value":"-"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f80776"},"children":[{"type":"text","value":"scrollHeight"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-f80776"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"),"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"      animated: "}]},{"type":"element","tag":"span","props":{"class":"ct-777784"},"children":[{"type":"text","value":"false"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":","}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"    });"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"    "}]},{"type":"element","tag":"span","props":{"class":"ct-f80776"},"children":[{"type":"text","value":"scrollHeight"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-f80776"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-980a4a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-f80776"},"children":[{"type":"text","value":"h"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"  }, []);"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"  "}]},{"type":"element","tag":"span","props":{"class":"ct-ad7381"},"children":[{"type":"text","value":"// onInteraction wraps interaction to preserve scroll position"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"  "}]},{"type":"element","tag":"span","props":{"class":"ct-b3a4e1"},"children":[{"type":"text","value":"const"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-aa5df8"},"children":[{"type":"text","value":"onInteraction"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-980a4a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-b01c6a"},"children":[{"type":"text","value":"useCallback"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"    () "}]},{"type":"element","tag":"span","props":{"class":"ct-b3a4e1"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"      "}]},{"type":"element","tag":"span","props":{"class":"ct-f80776"},"children":[{"type":"text","value":"shouldKeepScrollPosition"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-f80776"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-980a4a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-777784"},"children":[{"type":"text","value":"true"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"      "}]},{"type":"element","tag":"span","props":{"class":"ct-aa5df8"},"children":[{"type":"text","value":"setTimeout"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"(() "}]},{"type":"element","tag":"span","props":{"class":"ct-b3a4e1"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"        "}]},{"type":"element","tag":"span","props":{"class":"ct-b01c6a"},"children":[{"type":"text","value":"interact"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"();"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"      }, "}]},{"type":"element","tag":"span","props":{"class":"ct-d7040a"},"children":[{"type":"text","value":"0"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"      "}]},{"type":"element","tag":"span","props":{"class":"ct-aa5df8"},"children":[{"type":"text","value":"setTimeout"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"(() "}]},{"type":"element","tag":"span","props":{"class":"ct-b3a4e1"},"children":[{"type":"text","value":"=>"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":" {"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"        "}]},{"type":"element","tag":"span","props":{"class":"ct-f80776"},"children":[{"type":"text","value":"shouldKeepScrollPosition"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"."}]},{"type":"element","tag":"span","props":{"class":"ct-f80776"},"children":[{"type":"text","value":"current"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-980a4a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":" "}]},{"type":"element","tag":"span","props":{"class":"ct-777784"},"children":[{"type":"text","value":"false"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":";"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"      }, "}]},{"type":"element","tag":"span","props":{"class":"ct-d7040a"},"children":[{"type":"text","value":"500"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":");"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"    },"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"    ["}]},{"type":"element","tag":"span","props":{"class":"ct-f80776"},"children":[{"type":"text","value":"setSelectedSubThemes"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"],"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"  );"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"  "}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"  "}]},{"type":"element","tag":"span","props":{"class":"ct-980a4a"},"children":[{"type":"text","value":"return"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":" ("}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"    "}]},{"type":"element","tag":"span","props":{"class":"ct-980a4a"},"children":[{"type":"text","value":"<"}]},{"type":"element","tag":"span","props":{"class":"ct-5053e0"},"children":[{"type":"text","value":"FlatList"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"      "}]},{"type":"element","tag":"span","props":{"class":"ct-ad7381"},"children":[{"type":"text","value":"// ...required FlatList options"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"      "}]},{"type":"element","tag":"span","props":{"class":"ct-f80776"},"children":[{"type":"text","value":"ref"}]},{"type":"element","tag":"span","props":{"class":"ct-980a4a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"{"}]},{"type":"element","tag":"span","props":{"class":"ct-f80776"},"children":[{"type":"text","value":"ref"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"      "}]},{"type":"element","tag":"span","props":{"class":"ct-f80776"},"children":[{"type":"text","value":"onContentSizeChange"}]},{"type":"element","tag":"span","props":{"class":"ct-980a4a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"{"}]},{"type":"element","tag":"span","props":{"class":"ct-f80776"},"children":[{"type":"text","value":"onContentSizeChange"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"      "}]},{"type":"element","tag":"span","props":{"class":"ct-f80776"},"children":[{"type":"text","value":"onRefresh"}]},{"type":"element","tag":"span","props":{"class":"ct-980a4a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"{"}]},{"type":"element","tag":"span","props":{"class":"ct-f80776"},"children":[{"type":"text","value":"onRefresh"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"      "}]},{"type":"element","tag":"span","props":{"class":"ct-f80776"},"children":[{"type":"text","value":"onScroll"}]},{"type":"element","tag":"span","props":{"class":"ct-980a4a"},"children":[{"type":"text","value":"="}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"{"}]},{"type":"element","tag":"span","props":{"class":"ct-f80776"},"children":[{"type":"text","value":"onScroll"}]},{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"}"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"    "}]},{"type":"element","tag":"span","props":{"class":"ct-980a4a"},"children":[{"type":"text","value":"/>"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"  )"}]}]},{"type":"element","tag":"span","props":{"class":"line"},"children":[{"type":"element","tag":"span","props":{"class":"ct-f4ea83"},"children":[{"type":"text","value":"}"}]}]}]}]}]},{"type":"element","tag":"style","children":[{"type":"text","value":".ct-5053e0{color:#FFA657}.ct-001dc3{color:#79C0FF}.ct-5f62b3{color:#79C0FF}.ct-f80776{color:#C9D1D9}.ct-777784{color:#79C0FF}.ct-d7040a{color:#79C0FF}.ct-aa5df8{color:#79C0FF}.ct-003f45{color:#FFA657}.ct-db26db{color:#FFA657}.ct-384f36{color:#FF7B72}.ct-1ce468{color:#D2A8FF}.ct-896bd7{color:#C9D1D9}.ct-e25281{color:#FF7B72}.ct-f8200d{color:#79C0FF}.ct-b01c6a{color:#D2A8FF}.ct-980a4a{color:#FF7B72}.ct-1547e2{color:#FFA657}.ct-f4ea83{color:#C9D1D9}.ct-b3a4e1{color:#FF7B72}.ct-ad7381{color:#8B949E}.light .ct-ad7381{color:#93A1A1}.light .ct-b3a4e1{color:#073642}.light .ct-f4ea83{color:#657B83}.light .ct-1547e2{color:#268BD2}.light .ct-980a4a{color:#859900}.light .ct-b01c6a{color:#268BD2}.light .ct-f8200d{color:#859900}.light .ct-e25281{color:#073642}.light .ct-896bd7{color:#657B83}.light .ct-1ce468{color:#268BD2}.light .ct-384f36{color:#859900}.light .ct-db26db{color:#268BD2}.light .ct-003f45{color:#657B83}.light .ct-aa5df8{color:#268BD2}.light .ct-d7040a{color:#D33682}.light .ct-777784{color:#B58900}.light .ct-f80776{color:#268BD2}.light .ct-5f62b3{color:#268BD2}.light .ct-001dc3{color:#859900}.light .ct-5053e0{color:#657B83}"}]}],"toc":{"title":"","searchDepth":2,"depth":2,"links":[]}},"_type":"markdown","_id":"content:Frontend:React Native:Preserve FlatList scroll position in React Native.md","_source":"content","_file":"Frontend/React Native/Preserve FlatList scroll position in React Native.md","_extension":"md"}