Typescript/OnKeyPress에 대한 올바른 매개 변수 유형은 무엇입니까?
타입 스크립트 2.3.4, 리액트 15.5.4 및 리액트 부트스트랩 0.31.0.
나는 가지고 있다FormControl
사용자가 Enter를 누르면 뭔가 하고 싶은 게 있어요.
컨트롤:
<FormControl
name="keyword"
type="text"
value={this.state.keyword}
onKeyPress={this.handleKeywordKeypress}
onChange={(event: FormEvent<FormControlProps>) =>{
this.setState({
keyword: event.currentTarget.value as string
});
}}
/>
파라미터의 정의는 무엇입니까?handleKeywordKeypress
그렇습니까?
다음과 같이 정의할 수 있습니다.
handleKeywordKeypress= (e: any) =>{
log.debug("keypress: " + e.nativeEvent.code);
};
그것은 호출될 것이고, 그것은 인쇄될 것이다.keypress: Enter
하지만 어떤 타입이 좋을까?e
값을 (무엇과) 비교하여 Enter 키를 눌렀는지 확인할 수 있습니다.
이것은 효과가 있는 것 같습니다.
handleKeywordKeyPress = (e: React.KeyboardEvent<FormControl>) =>{
if( e.key == 'Enter' ){
if( this.isFormValid() ){
this.handleCreateClicked();
}
}
};
여기서의(Ha ha) 핵심은, 나에게 있어,React.KeyboardEvent
,보다는KeyboardEvent
.
React 코드를 살펴보니 다음과 같은 정의가 있었습니다.
type KeyboardEventHandler<T> = EventHandler<KeyboardEvent<T>>;
하지만 복사/붙여넣을 때는 몰랐습니다.KeyboardEvent
내 핸들러의 파라미터 타입으로서 컴파일러는 실제로 그 컴파일러가KeyboardEvent
이것은 (React 정의가 아닌) Typescript 라이브러리에서 정의된 일종의 기본 유형입니다.
위의 두 답변 모두 문제를 해결하지 못했습니다.매우 간단하고 알기 쉬울 것입니다.
import { KeyboardEvent } from 'react';
const handleKeyPress = (e: KeyboardEvent<HTMLInputElement>) => {
// do stuff
};
의 종류onKeyPress
그래야 한다KeyboardEventHandler<T>
는, 다음의 몇개의 방법으로 기술할 수 있습니다.
handleKeywordKeypress: KeyboardEventHandler<FormControl> = e => {
// use e.keyCode in here
}
또는
import { KeyboardEvent } from "react";
handleKeywordKeypress = (e: KeyboardEvent<FormControl>) => {
// use e.keyCode in here
};
답변에서 식별한 바와 같이 두 번째 옵션을 선택할 경우 구체적으로 다음을 사용해야 합니다.KeyboardEvent
리액트로부터.
주의:keyCode
의 속성으로 직접 사용 가능e
; 를 사용하여 액세스 할 필요가 없습니다.nativeEvent
.
또한 Generic type 파라미터는T
가 되어야 합니다.FormControl
컴포넌트 대신 컴포넌트를 사용할 수 있으므로 다른 핸들러도 교체해야 합니다.
답변은 이 페이지에 있는 두 가지 답변의 조합입니다. 이 답변은 React만 적용하면 됩니다.
@Shorn님 감사합니다React.KeyboardEvent
@ 언더프랑켄우드:HTMLInputElement
import React from "react";
const handleKeyPress = (e: React.KeyboardEvent<HTMLInputElement>) => {
// ...
};
언급URL : https://stackoverflow.com/questions/46462841/typescript-react-whats-the-correct-type-of-the-parameter-for-onkeypress
'programing' 카테고리의 다른 글
mongo group 쿼리 필드 유지 방법 (0) | 2023.03.29 |
---|---|
Jasmine에서 jQuery AJAX 이벤트를 확인하려면 어떻게 해야 합니까? (0) | 2023.03.29 |
PUT 메서드를 Angular의 $http와 함께 사용할 때 쿼리 문자열에 매개 변수 추가 (0) | 2023.03.29 |
스프링 부트 및 스팍과의 통합 테스트 (0) | 2023.03.29 |
GMail Chat은 어떻게 클라이언트의 조작 없이 AJAX 요구를 할 수 있습니까? (0) | 2023.03.29 |