【发布时间】:2021-10-22 06:21:47
【问题描述】:
我有以下组件结构:
这是输入组件。当 onChange 事件触发时,将调用 validate 函数。
import React, {FC, useState} from 'react';
interface InputProps {
config : {}
}
/**
* @param config
* @constructor
*/
const Input: FC<InputProps> = ({config}) => {
/**
* @param inputValue
*/
const validate: Function = (inputValue: any) =>
{
// Does input validation
}
return(
<div>
<input
onChange={(event) => {
validate(event.target.value);
}}
/>
</div>
);
}
export default Input;
这是我的 App.tsx。我想在按钮 onClick 事件中调用所有输入的验证。
import React, {useState} from "react";
import Form from './components/Form/Form';
import Input from './components/UI/Input/Input';
import Button from './components/UI/Button/Button';
const App = () => {
return(
<div className="app">
<Form title="Simple form">
<Input label="Email address"/>
<Input label="Password"/>
<Button config={{
text: 'Sign in',
onClick: (event) => {
// Here I would like to call the validatе method on the email address and
// password inputs, but I don’t know how to do this yet.
}
}}/>
</Form>
</div>
);
}
export default App;
【问题讨论】:
-
在 React 中这样做有点反模式,但您可以使用 React.forwardRef 和 useImperativeHandle 挂钩来完成此操作。
-
@DrewReese 感谢您的评论。我最近开始研究反应。如果这是一个反模式,我应该怎么做?
-
更“React”的方法是让
App或Form保持表单状态,即与按钮在同一个组件中的“事实来源”,传递state 和 updater 回调到输入。见lifting state up。
标签: reactjs typescript react-typescript