React Native组件状态更新后不渲染,嵌套FlatList问题求助
嵌套FlatList状态变更后不重渲染的问题解决
核心问题出在你更新variant状态的方式上——你直接修改了原state数组的内容,没有创建新的数组引用,导致React无法检测到状态变化,自然不会触发重渲染。
具体错误点
这段代码里的逻辑存在问题:
let newVariant = variant; newVariant[i] = item; variantSet(newVariant);
let newVariant = variant;只是把原数组的引用赋值给了新变量,修改newVariant[i]本质上还是在修改原state数组。React的状态更新依赖引用变化来识别状态变更,原引用没变化,React就会认为状态没有更新,不会重新渲染组件。
修复方法
创建原数组的浅拷贝,生成新的数组引用再更新状态,最直观的方式是用ES6展开运算符:
onPress={() => { console.log('Pressed', variant); // 生成原数组的浅拷贝,得到新的数组引用 const newVariant = [...variant]; newVariant[i] = item; variantSet(newVariant); }}
这样每次点击按钮都会生成一个全新的数组,useState检测到引用变化后,就会触发组件重渲染,FlatList也会根据新的variant状态更新按钮的背景色。
额外提示
你给FlatList设置的key={i}(用数组索引作为key),如果后续data数组有元素增删、顺序调整的情况,可能会导致FlatList的组件复用异常,建议使用更稳定的唯一标识作为key,不过这不是当前问题的核心。
内容的提问来源于stack exchange,提问作者Wisam Jbori
相关产品推荐
相关产品推荐

