Use useDeferredValue for content language toggles

Defer the contentLanguages value used for computing possibleLanguages
and the Admonition conditional, so that toggle checkbox state updates
at high priority while the heavier derived renders are deferred.

https://claude.ai/code/session_01WFBuRom117yg7WR66J1ySs
This commit is contained in:
Claude
2026-02-24 16:00:19 +00:00
parent 1850042c37
commit 69b2cc903c
+8 -4
View File
@@ -1,4 +1,4 @@
import {useCallback, useMemo, useState} from 'react'
import {useCallback, useDeferredValue, useMemo, useState} from 'react'
import {View} from 'react-native'
import {msg} from '@lingui/core/macro'
import {useLingui} from '@lingui/react'
@@ -60,17 +60,21 @@ export function LanguageSettingsScreen({}: Props) {
langPrefs.contentLanguages,
)
const deferredContentLanguages = useDeferredValue(
langPrefs.contentLanguages,
)
const possibleLanguages = useMemo(() => {
return [
...new Set([
...recentLanguages,
...langPrefs.contentLanguages,
...deferredContentLanguages,
...langPrefs.primaryLanguage,
]),
]
.map(lang => LANGUAGES.find(l => l.code2 === lang))
.filter(x => !!x)
}, [recentLanguages, langPrefs.contentLanguages, langPrefs.primaryLanguage])
}, [recentLanguages, deferredContentLanguages, langPrefs.primaryLanguage])
return (
<Layout.Screen testID="PreferencesLanguagesScreen">
@@ -165,7 +169,7 @@ export function LanguageSettingsScreen({}: Props) {
</Trans>
</Text>
{langPrefs.contentLanguages.length === 0 && (
{deferredContentLanguages.length === 0 && (
<Admonition type="info">
<Trans>All languages will be shown in your feeds.</Trans>
</Admonition>