Это приложение разработано компанией react-native. Я знаю, что этот вопрос можно продублировать, но я попробовал все решения, и они не сработали.
Я очень запуталась. Когда какой-либо элемент добавляет / выталкивает массив в объект, элемент пользовательского интерфейса обновляется. Но когда я удаляю / соединяю один и тот же массив, этот механизм не работает, и элемент пользовательского интерфейса не обновляется. Почему?
function createWordsetObject() {
const object = {
name: '',
words: [],
}
return object
}
export default function AddWordScreen({ navigation, route }) {
const [wordsetObject, setWordsetObj] = useState(
route.params == null ? createWordsetObject() : route.params.wordSetObject
)
const [wordsetName, setWordsetName] = useState(
route.params == null ? '' : route.params.wordSetObject.name
)
const [word, setWord] = useState('')
const [meaning, setMeaning] = useState('')
const onPressAddButtonHandler = () => {
if (word != null && meaning != null) {
var addRecord = { word: word, meaning: meaning }
wordsetObject.words.push(addRecord)
setWord('')
setMeaning('')
printLog()
}
}
const onPressDeleteWordButton = index => {
var modifiedObj = wordsetObject
if (modifiedObj.words.length > 0) {
console.log(modifiedObj.words.length)
modifiedObj.words.splice(index, 1)
}
setWordsetObj(modifiedObj)
console.log(wordsetObject.words.length)
}
return (
<ScrollView>
{wordsetObject.words.map((item, index) => {
return (
<ListItem
key={index}
title={item.word}
subtitle={item.meaning}
bottomDivider
rightIcon={
<View style={{ flexDirection: 'row' }}>
<MCIcon name="pencil" size={22} />
<MCIcon
name="delete"
size={22}
color="red"
onPress={() => onPressDeleteWordButton(index)}
/>
</View>
}
/>
)
})}
</ScrollView>
)
}