Использовать реквизит вне рендера

Я пытаюсь получить доступ к своему "сообщению" от родителей. Я могу получить к нему доступ внутри render (), но не выше, где у меня есть мой getCom (). Как сделать опору доступной в функциях, а не только в рендере? Я пытался использовать this.item.id.bind(this), но это не сработало.

Родитель:

<LoadComments post = {item.id}/>

Ребенок

class LoadComments extends Component {
  getCom = async () => {

    // Thid does not work

    this.unsubscribe = await firestore.collection("comments").where("post", "= = ", this.props.post).onSnapshot((querySnapshot) => {
     // Rest of code

  }
  render() {
    return (

      // This works:

      {this.props.post}

    )
  }

Вы супер (инг) реквизит?

Saddy 15.09.2018 18:17

Вы передаете опору id?

Colin Ricardo 15.09.2018 18:19

Я что-то упускаю? У вас нет реквизита с именем id. У вас есть реквизит с именем post. this.props.id или this.props.item.id - это undefined. У вас здесь this.props.post.

devserkan 15.09.2018 18:20
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
4
3
4 343
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Как видите, вы передаете id как post своему дочернему компоненту:

<LoadComments post = {item.id}/>

поэтому вы должны использовать это:

this.props.post

если вы хотите использовать идентификатор, вы должны передать его как id следующим образом:

<LoadComments id = {item.id}/>

Чтобы использовать значение

 item.id

в вашем дочернем компоненте вам следует сделать следующее:

В родительском:

<LoadComments post = {item.id}>

В дочернем компоненте:

class LoadComments extends Component {

   async getCom(props) => {

   // This would work now

  this.unsubscribe = await firestore.collection("comments").where("post", "= = ", 
  props.post).onSnapshot((querySnapshot) => {
   // Rest of code

   }
  render() {
    const props = this.props;
      return (

        {this.props.post}

        getCom(props)

 )
}

Вы должны сохранить реквизиты в статическом компоненте в методе рендеринга, а затем передать реквизиты функции, объявленной вне метода рендеринга.

Другие вопросы по теме