mirror of
https://github.com/bulwarkmail/native.git
synced 2026-10-31 08:06:36 +00:00
The mail list passed `onEndReached` and `onRefresh` as inline arrows, so FlatList (a pure component) re-rendered on every render of the screen, and without `strictMode` it then handed its cells a new render function, so every mounted row re-rendered too. Each row also built a fresh swipe `context` object and `onAction` closure, so its `SwipeableRow` could never skip a render. Loading the next page while scrolling flips `loading` and appends rows, re-rendering up to a couple of hundred rows mid-fling. - `onEndReached` and `onRefresh` are stable callbacks and FlatList runs with `strictMode`, which the default React Native typings lack, so `src/types/react-native-flatlist.d.ts` declares it - each row is an `EmailListItem`, memoized on primitives and stable callbacks, which builds its swipe context and callback once per row - rows share one swipe callback that reads the current handler through a ref, so rebuilding the handler no longer re-renders every row