React Native Text Input每击键一次就关闭的问题求助
解决TextInput输入字符后自动关闭的问题
问题根源
你当前的FlatList把ListHeaderComponent定义成了匿名箭头函数() => <>{children}</>,每次组件重渲染时,这个匿名函数都会生成一个全新的组件实例,导致嵌套在里面的TextInput被强制卸载后重新挂载,所以输入字符触发状态更新时,TextInput就会失去焦点、自动关闭。
解决方案
方案1:直接传递children给ListHeaderComponent
不需要用匿名函数包裹,直接把children作为ListHeaderComponent的值:
<FlatList data={[]} renderItem={null} ListHeaderComponent={children} style={styles.scrollMain} />
方案2:用useCallback缓存渲染函数(如果需要额外逻辑)
如果必须通过函数包裹children来添加额外处理,用useCallback缓存这个函数,避免每次渲染都创建新的函数实例:
首先导入useCallback:
import { useCallback } from 'react';
然后在组件内部定义缓存后的渲染函数:
const renderHeader = useCallback(() => <>{children}</>, [children]);
最后传给FlatList:
<FlatList data={[]} renderItem={null} ListHeaderComponent={renderHeader} style={styles.scrollMain} />
额外检查点
确认你的styles.input没有设置会导致布局跳动的动态样式(比如随内容变化的高度),这类样式也可能间接导致TextInput失去焦点,但核心问题还是ListHeaderComponent的定义方式。
内容的提问来源于stack exchange,提问作者Akhil Bisht
相关产品推荐
相关产品推荐

