reactjs - FlatList 不使用 React Hooks 渲染
问题描述
我正在尝试通过单击某个项目来重命名 FlatList 中的 [0] 项目,但这对我不起作用,当我单击每个项目时,什么也没有发生,我也没有收到任何错误。我怎样才能解决这个问题?
这是我的代码。
export default function renameSample() {
const data = [
{
id: '1',
name: 'test1',
},
{
id: '2',
name: 'test2',
},
{
id: '3',
name: 'test3',
},
];
const [stateUser, onChangeUser] = useState(data);
return (
<FlatList
data={stateUser}
renderItem={({item}) =>
<TouchableOpacity
onPress={() => {
let setData = stateUser;
setData[0].name = 'changed';
onChangeUser(setData);
}
}
>
<Item name={item.name} />
</TouchableOpacity>
}
keyExtractor={item => item.id}
/>
</View>
);
}
解决方案
如果您的要求是更改单击的项目,则代码如下所示。您可以获取单击项目的索引并进行更改。
function RenameSample() {
const data = [
{
id: '1',
name: 'test1',
},
{
id: '2',
name: 'test2',
},
{
id: '3',
name: 'test3',
},
];
const [stateUser, onChangeUser] = useState(data);
return (
<View>
<FlatList
data={stateUser}
renderItem={({ item, index }) => (
<TouchableOpacity
onPress={() => {
const newData=[...stateUser];
newData[index].name = 'changed';
onChangeUser(newData);
}}>
<Item name={item.name} />
</TouchableOpacity>
)}
keyExtractor={(item) => item.id}
/>
</View>
);
}
推荐阅读
- android-recyclerview - RecyclerView 项目有一个图标,该图标具有可见性的条件数据绑定,但它不刷新
- jquery - 为什么我的逻辑,使用最接近,不起作用?
- python - Pandas 匹配数据帧结构
- sql - 具有不同数量的属性条目的数据库
- haskell - Haskell 更优雅地从 Sql 转换为其他类型
- sql-server - 如何选择特定列作为行?
- java - 无法将在 set on action 中创建的 Arraylist 传递给另一个 set on action 事件处理程序
- r - 从 google cloud API / googleway 返回与搜索查询匹配的所有唯一地点
- selenium - Selenium IDE 如何设置超时?
- angularjs - 'ng-repeat' 重新渲染会产生闪烁