【发布时间】:2020-04-10 05:24:45
【问题描述】:
我的项目中有一些关于数组的问题,但不知道如何解决
我的数组看起来像:
const [array, setArray] = useState([
{ id: 1, name: 'Luca', classes: [{ id: 1, className: '', teacherName: '' }, { id: 2, className: '', teacherName: '' }] },
{ id: 2, name: 'Jin', classes: [{ id: 1, className: '', teacherName: '' }, { id: 2, className: '', teacherName: '' }] },
])
< FlatList
data = { array }
renderItem = {({ item, index }) => {
return (
<View>
<FlatList
data={item.classes}
renderItem={({ item, index }) => {
return (
<View >
<TextInput
placeholder={''}
onChangeText={(text) => onChangeClassName(item, text)}
value={item.className}
/>
</View>
)
}}
></FlatList>
</View>
)
}}
></FlatList >
onChangeClassName
onChangeClassName = (item, text) => {
const newArr = arr
for (let i = 0; i < newArr.length; i++) {
for (let z = 0; z < newArr[i].classes.length; z++) {
if (newArr[i].classes[z] === item ) {
newArr[i].classes[z].className = text
} }]
}
}
}
setArray([...arr])
}
所以每个学生都有姓名和班级,每个学生的班级都不同,我使用 textInput 更改它。我的问题是当我为其中一个学生设置 className 时,两个学生相同位置的 className 都发生了变化
例如:在 Luca 的 classes[0] 中点击 -> set text = '7A'
数组会这样改变。
const [array, setArray] = useState([
{ id: 1, name: 'Luca', classes: [{ id: 1, className: '7A', teacherName: '' }, { id: 2, className: '', teacherName: '' }] },
{ id: 2, name: 'Jin', classes: [{ id: 1, className: '7A', teacherName: '' }, { id: 2, className: '', teacherName: '' }] },
])
任何人有解决方案?请帮助我
【问题讨论】:
-
首先改变你的命名约定,你的外循环也有项目,内循环也有项目,你需要区分它。如果它仍然不起作用,则问题可能是其他问题。我说的是组件中的循环
-
最简单的方法是从平面列表中获取...行的索引...然后将其传递给您要更改文本的方法...然后使用索引从数组并改变它......这将是快速的方法......使用循环将在大型数据集中产生问题
-
@AbhishekKulkarni 感谢您的评论,但命名约定没有问题。它仍然可以正常工作,但我会清楚地更改名称。我认为当我将 className 设置为文本时有问题
-
@Pramod 是的,我根本不想使用循环。但我不知道如何以另一种方式做到这一点......
标签: javascript arrays react-native