Отправить функцию onClick в качестве реквизита компоненту в React с помощью машинописного текста

#javascript #reactjs #typescript #react-hooks

#язык JavaScript #реагирует на #машинописный текст #реагируют-крючки

Вопрос:

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

Вот код:

 export function ParentComponent(props: ParentComponentProps) {   const [isOpened, toggleModal] = useToggle(false);  // useToggle is a custom hook that toggles a boolean  ...  const onClick = () =gt; {  toggleModal();  }   return (  lt;ChildComponent onClick={onClick} /gt;  ); }  

Для дочернего компонента я не знаю, как определить интерфейс, что здесь должно быть помещено?

 export interface ChildComponentProps {  onClick: lt;unknowngt;(); // what to add here? }  

А вот и дочерний компонент:

 export function ChildComponent({onClick}: ChildComponentProps) {  ...  return (   lt;divgt;  ...  lt;ButtonComponent   onClick={() =gt; onClick()}  ...  /gt;  ...  ); }  

Есть идеи, что добавить в интерфейс или должны ли быть какие-либо другие изменения, чтобы текст был правильным?

Ответ №1:

Для таких функций, как onClick, вы должны описать параметры ввода и вывода или просто написать функцию (хотя для лучшей проверки типа вам не следует просто писать функцию).

Так что что-то вроде этого:

 onClick: () =gt; void  

Если, например, ваша функция получает число и возвращает строку, вы должны написать ее так:

 onClick: (n: number) =gt; string  

Ответ №2:

Родительский компонент:

 interface OnClickIdInterface {  (): void, }  export interface parentPropsInterface {  onClick?: OnGetIdInterface; }   render() {  return lt;ChildComponent onClick={(id) =gt; this.onClick(id)}/gt;  }  

Дочерний компонент:

 const HomePresentation: React.FunctionComponentlt;parentPropsInterfacegt; = ({onClick}) =gt; {  return (  lt;div onClick={()=gt;onClick()}gt;  some content  lt;/divgt;  ) }  

Ответ №3:

Следующий код должен работать. Но это зависит от ButtonComponent . Используется React.MouseEventHandlerlt;T = Elementgt; как тип.

 export interface ChildComponentProps {  onClick: React.MouseEventHandlerlt;ButtonComponentgt; }  export function ChildComponent({onClick}: ChildComponentProps) {  ...  return (   lt;divgt;  ...  lt;ButtonComponent   onClick={() =gt; onClick()}  ...  /gt;  ...  ); }  

Пожалуйста, сообщите мне, если это неверно.