#reactjs #typescript #callback
Вопрос:
У меня есть простая функция обратного вызова, которая передается от родителя на несколько уровней вниз к компоненту, который активирует ее при нажатии.
const routeToChapter = (courseId: string, chapterId: string) => {
// do something
}
<Sidebar
routeToChapter={routeToChapter}
/>
А затем боковая панель передает его еще 3 дочерним элементам до такой степени, что он действительно может быть запущен в таком компоненте, как этот:
export const ChapterTreeItem = ({
routeToChapter,
}: Props) => {
const onRouteToChapter = () => {
routeToChapter(courseId, chapter.id as string)
}
return (
<EditorTreeItem
onDoubleClick={onRouteToChapter}
/> ......
Проблема в том, что onRouteToChapter запускается, но «routeToChapter» выдает ошибку, в которой говорится, что «routeToChapter не является функцией».
Я экспериментировал с тестовым обратным вызовом, который я передал от непосредственного родителя нижнему ребенку, и это сработало. И я поднял его еще на 2 уровня, прежде чем он перестал работать, и я получил ту же ошибку. Я не уверен, почему это происходит.
Редактировать
Я утешаю.зарегистрируйте функцию «routeToChapter» на каждом уровне, и она будет напечатана как функция, в том числе в нижнем компоненте. Однако, если я напечатаю его в «onRouteToChapter» при вызове функции, он всегда возвращается как неопределенный. Странный
Комментарии:
1. Это должно сработать, у вас, вероятно, где-то еще есть опечатка. Можете ли вы попробовать создать кодовое перо или что-то подобное, воспроизводящее проблему?
2. Просто для подтверждения, вы явно передаете опору от каждого промежуточного ребенка вниз?
3. Да. И я дважды проверил, нет ли опечаток, их нет. Кроме того, я использую Typepscript, так что все набрано. В нижнем дочернем элементе Typescript также правильно регистрирует его как функцию.
Ответ №1:
Моя вина.
У меня был этот компонент, существующий в 2 разных местах, но я тестировал его только там, где у родителя не было функции «routeToChapter» в родителе, что означало, что он вызывал undefined.