#reactjs #typescript
#reactjs #typescript
Вопрос:
Привет, я новичок в typescript, и в моем проекте есть 2 компонента: диалоговое окно ввода и компонент меню настроек. Я использую inputDialog
внутри settingmenu
компонента
мой компонент диалогового окна ввода выглядит следующим образом
interface InputDialogContentProps {
inputLabel: string;
inputType: string;
onChange?: any;
}
export default function InputDialogContent(props: InputDialogContentProps) {
const classes = inputDialogStyle();
return (
<DialogContent className={classes.dialogContentPlacement}>
<TextField
autoFocus
className={classes.textFieldStyle}
margin="dense"
id="name"
label={props.inputLabel}
type={props.inputType}
onChange={props.onChange}
fullWidth
/>
</DialogContent>
Пожалуйста, обратите внимание, что я объявляю об изменении, как any
в этом компоненте.
вот мой документ меню настроек.
<InputDialogContent
inputLabel="Email Address"
inputType="email"
onChange={onInputChange}
/>
function onInputChange(e: React.ChangeEvent<HTMLTextAreaElement>) {
setEnableLoginButton(isValidEmail(e.target.value));
}
Как вы можете видеть, я использую onChange для отслеживания изменений внутри текстовой области html.
Итак, вместо any
того, как правильно объявить это Onchange
внутри компонента InputDialog
Ответ №1:
Это было бы:
interface InputDialogContentProps {
inputLabel: string;
inputType: string;
onChange?: (e: React.ChangeEvent<HTMLTextAreaElement>) => void;
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
}
Это функция, которая принимает один параметр типа React.ChangeEvent<HTMLTextAreaElement>
и ничего не возвращает. Общая форма:
(parameters) => returnType;
Подробнее в руководстве по машинописи.
Комментарии:
1. Разве это невозможно просто сделать
onChange?: ReturnType<typeof React.ChangeEvent<HTMLTextAreaElement>>;
?2. @Joel — Я не понимаю, что вы пытаетесь там сделать ( это работает не так, как показано ), но тип в ответе — это простой, прямой способ сделать это.
3. codesandbox.io/s/react-typescript-playground-forked-rke63?file =/… вот так.
4. это работа.
const onInputChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => { //do something console.log(e.target.value); };
5. @T.J.Crowder Но да, мне было в основном любопытно, можно ли сделать это каким-либо другим способом, но вы правы, я поторопился, мой пример просто приводит в исполнение событие, которое возвращается
void
.