#reactjs #typescript
Вопрос:
Я пытался передать реквизит, как
<Mycomp
deleteAcc={handleDelete(accountId)}
/>
к другому компоненту. Я пишу реквизит, как
interface AccProps {
deleteAcc: () => void;
}
и вызовите функцию, например
deleteAcc()
Но я получил следующую ошибку
Type 'void' is not assignable to type '() => void'
Не знаю, что я здесь пропустил.
Комментарии:
1. передай это вот так:
deleteAcc={() => handleDelete(accountId)}
2. Убедитесь, что вы прочитали документы react, особенно это reactjs.org/docs/faq-functions.html
Ответ №1:
Скорее всего , потому, что тип возвращаемого значения handleDelete
функции является void
, и вы передаете возвращаемое значение handleDelete
. в то время deleteAcc
как требуется функция с () => void
типом.
Попробуй:
<Mycomp deleteAcc={() => handleDelete(accountId)}/>
Ответ №2:
Когда вы передаете handleDelete(accountId)
в качестве опоры, функция вызывается немедленно, и ее возвращаемое значение (в данном случае a void
) является тем, которое передается в качестве опоры. Если функция должна принимать этот конкретный аргумент, отправьте его в качестве обратного вызова:
<Mycomp deleteAcc={() => handleDelete(accountId)} />
Начиная с handleDelete(accountId)
reutrn void
, этот обратный вызов типизирован () => void
и, следовательно, соответствует типу prop.
Если функция не обязана принимать аргумент, вы можете отправить его по имени:
<Mycomp deleteAcc={handleDelete} />
Часто хорошей идеей является создание уникальной функции-оболочки в компоненте и отправка ее по имени, например:
const wrapper = () => {
handleDelete(accountId);
};
<Mycomp deleteAcc={wrapper} />