Tôi đang tìm cách tạo một thành phần không trạng thái input
phần tử của thành phần mẹ có thể được xác thực bởi thành phần mẹ.
Trong ví dụ của tôi bên dưới, tôi đang gặp sự cố trong đó đầu vào ref
không bao giờ được gán cho quyền riêng tư của cha mẹ_emailAddress
tài sản .
Khi nào handleSubmit
được gọi this._emailAddress
là undefined
. Có điều gì đó tôi đang thiếu, hoặc có cách nào tốt hơn để làm điều này?
interface FormTestState {
errors: string;
}
class FormTest extends React.Component<void, FormTestState> {
componentWillMount() {
this.setState({ errors: '' });
}
render(): JSX.Element {
return (
<main role='main' className='about_us'>
<form onSubmit={this._handleSubmit.bind(this)}>
<TextInput
label='email'
inputName='txtInput'
ariaLabel='email'
validation={this.state.errors}
ref={r => this._emailAddress = r}
/>
<button type='submit'>submit</button>
</form>
</main>
);
}
private _emailAddress: HTMLInputElement;
private _handleSubmit(event: Event): void {
event.preventDefault();
// this._emailAddress is undefined
if (!Validators.isEmail(this._emailAddress.value)) {
this.setState({ errors: 'Please enter an email address.' });
} else {
this.setState({ errors: 'All Good.' });
}
}
}
const TextInput = ({ label, inputName, ariaLabel, validation, ref }: { label: string; inputName: string; ariaLabel: string; validation?: string; ref: (ref: HTMLInputElement) => void }) => (
<div>
<label htmlFor='txt_register_first_name'>
{ label }
</label>
<input type='text' id={inputName} name={inputName} className='input ' aria-label={ariaLabel} ref={ref} />
<div className='input_validation'>
<span>{validation}</span>
</div>
</div>
);
console.log
chức năng ref của bạn để xem nếu nó được gọi là