вызывающая функция с динамическим параметром

#react-native #function

#react-native #функция

Вопрос:

Мне нужно вызвать функцию и передать ей идентификатор параметра:

  <TouchableOpacity
        onPress={() => this.addInstaPost(myInstaPost[i].postId)}
    >
        <Text style={styles.reply}>
            <Icon family="Entypo" size={19} name="reply-all" /> Reply
        </Text>
    </TouchableOpacity>
 

эта возвращаемая ошибка «Undefined не является объектом (вычисление ‘myInstaPost[i].postID’

если я удалю параметр и просто выведу его после текстового «воспроизведения» для отладки….

 <TouchableOpacity
    onPress={() => this.addInstaPost()}
>
    <Text style={styles.reply}>
        <Icon family="Entypo" size={19} name="reply-all" /> Reply {myInstaPost[i].postId}
    </Text>
</TouchableOpacity>;
 

Он отображается в полном порядке….

Есть идеи, что я делаю не так?

Это как-то связано с циклом и onPress() …

Если я объявлю переменную IE: var currId = myInstaPost[i].postID;

когда я делаю это:

 onPress={() => this.addInstaPost(currId)}
 

а затем внутри addInstaPost я предупреждаю параметр, который я всегда получаю из первого элемента в цикле….

но когда я показываю его где-то внутри текста … для отладки я получаю правильный.

Ответ №1:

попробуйте использовать .map метод для этого случая

 {myInstaPost.map((item, index) => (
<TouchableOpacity onPress={() => this.addInstaPost(item?.postId)} key={index}>
  <Text style={styles.reply}>
    <Icon family="Entypo" size={19} name="reply-all" /> Reply
  </Text>
</TouchableOpacity>
))}
 

Комментарии:

1. Спасибо, myInstaPost — это массив объектов, поэтому, если использовать ‘myInstaPost[i].map’, я получаю сообщение об ошибке ‘undefined не является функцией (рядом с myInstaPost [i].map)’, если я объявляю переменную внутри цикла, т.Е.: var currMyInstaPost = myInstaPost [i]; Яя получаю ту же ошибку… Если я удалю счетчик myInstaPost.map, ошибки не будет, но он отображает все ссылки, а не только текущие.

2. Объявление фиктивного массива сделало свое дело… var currMyInstaPost = []; currMyInstaPost.push(myInstaPost[i]); и затем я сделал, как было предложено… {currMyInstaPost.map((item, index) => (…. и это сработало хорошо…