TypeScript — попытка вызвать функцию через props. ОШИБКА — x не является функцией

#reactjs #typescript

#reactjs #typescript

Вопрос:

Привет, у меня есть панель мониторинга, которая вызывает отдельный файл для генерации уведомлений.

с уведомлением у меня есть кнопка x, чтобы отклонить уведомление, которое вызывает через props функцию, которая удаляет это уведомление из массива данных.

Но всякий раз, когда я пытаюсь вызвать функцию, нажав X, я получаю сообщение об ошибке, указывающее, что функция в файле панели мониторинга не является функцией.

 handleNotification = (index: number)   => {
    console.log("notification" , index, "clicked")
    TempData.splice(index, 1);

  }


 // this.props.divSelected controls the functionality to open cert tabe in correct DIV
  render() {    
    const globalProps = {
      notifications: TempData,
      handleNotification: this.handleNotification
    }
  

это код панели мониторинга

    interface Props {
  notifications: Array<object>
  handleNotification: (index:number) => void
}

function GenerateMap(data: any, props:Props): JSX.Element {  
  return(
    data.notifications.map((element: { type: string; message: string, }, i: number) => {
    return (
      <div key={i} className={element.type}>{element.message}<button onClick={() => { props.handleNotification(i) }}></button></div>
      )
  }))
  
}
  

это код уведомления.

 <GenerateNotification {...globalProps}/>
  

вот как я передаю реквизиты из кода панели мониторинга в файл уведомлений.

единственное, о чем я могу думать, это то, что эта функция проходит через отдельный const Y, который вызывает эту функцию внутри файла.

но экспортируется только const Y ??

заранее спасибо

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

1. Как вы переходите globalProps к GenerateMap своей функции рендеринга?

2. обновлено, чтобы включить запрошенный код

Ответ №1:

проблема, с которой я столкнулся, заключалась в том, что я пытался выполнить обратный вызов функции через props из функции const, а не из класса.

как только я изменил функцию const на класс, все заработало.