У меня есть список из многих элементов, каждый из которых имеет TextInput и TouchableOpacity, обернутые View. Я пытаюсь установить фокус на TextInput в элементе списка, в котором была нажата TouchableOpacity. Это необходимо для редактирования имени каждого элемента.
Ниже приведен код того, как я пытался это сделать. Проблема этого кода в том, что после нажатия на любой из TouchableOpacity последний TextInput всегда будет сфокусирован из-за того, что последняя итерация перезаписывает textInputRef
.
Есть ли способ сделать textInputRef
содержат ссылку на TextInput, который TouchableOpacity будет нажимать?
const ListComponent = ({list}) => {
const textInputValue = useRef('');
const textInputRef = useRef(null);
changeItemName = (text) => {
textInputValue.current = text;
};
return (
<ScrollView>
{list.length > 0 &&
list.map((item) => (
<View key={item._id}>
<TouchableOpacity>
<View
<Text>{`Item: `}</Text>
<TextInput ref={textInputRef} onChangeText={changeItemName}>
{item.name}
</TextInput>
</View>
</TouchableOpacity>
<TouchableOpacity
onPress={() => {
textInputValue.current = '';
}}>
<Icon name={'check'} size={25} color="#000" />
</TouchableOpacity>
<View>
<TouchableOpacity
onPress={() => {
textInputValue.current = item.name;
textInputRef.current.focus();
}}>
<Icon name={'edit'} size={25} color="#000" />
</TouchableOpacity>
</View>
</View>
))}
</ScrollView>
);
};