대응: 키보드 이벤트 핸들러 모든 '특수'
React를 얻을 수 없습니다.SyntheticKeyboardEvent를 제외한 모든 것을 등록하는 핸들러null이벤트 속성으로 설정합니다.
부품은 단번에 분리하여 어플리케이션과 같은 결과를 얻을 수 있습니다.내가 뭘 잘못하고 있는지 아는 사람 있어?
http://jsfiddle.net/kb3gN/1405/
var Hello = React.createClass({
render: function() {
return (
<div>
<p contentEditable="true"
onKeyDown={this.handleKeyDown}
onKeyUp={this.handleKeyUp}
onKeyPress={this.handleKeyPress}>Foobar</p>
<textarea
onKeyDown={this.handleKeyDown}
onKeyUp={this.handleKeyUp}
onKeyPress={this.handleKeyPress}>
</textarea>
<div>
<input type="text" name="foo"
onKeyDown={this.handleKeyDown}
onKeyUp={this.handleKeyUp}
onKeyPress={this.handleKeyPress} />
</div>
</div>
);
},
handleKeyDown: function(e) {
console.log(e);
},
handleKeyUp: function(e) {
console.log(e);
},
handleKeyPress: function(e) {
console.log(e);
}
});
React.renderComponent(<Hello />, document.body);
Binary Muse는 IRC에 대한 답변을 제공했습니다.알고보니 이건 그냥 별난 짓이에요. 성질을 직접 읽을 수는 없어요.SyntheticKeyboardEvent-- 핸들러에서 속성을 지정해야 합니다.
handleKeyUp: function(e) {
console.log(e.type, e.which, e.timeStamp);
},
http://jsfiddle.net/BinaryMuse/B98Ar/
console.log()는 비동기적이며 이벤트에 액세스할 때 React는 이미 가비지를 수집했습니다(퍼포먼스상의 이유로 이벤트를 재사용합니다.
디버깅을 위해 가장 간단한 방법은 React에 해당 이벤트를 폐기하지 않도록 지시하는 것입니다.
e.persist() // NOTE: don't forget to remove it post debug
console.log(e)
API 문서를 찾을 수 없습니다.이 방법은 적어도 소스 https://github.com/facebook/react/blob/c78464f/src/renderers/shared/stack/event/SyntheticEvent.js#L155에서 문서화되어 있습니다.
Riccardo Galli가 올바르게 지적했듯이 로그 객체는 콘솔에서 액세스할 때 이미 가비지가 수집되어 있습니다.
제가 사용하는 솔루션은 개체의 클론을 로그로 기록하기만 하면 가비지 수집이 되지 않습니다.클로닝은 여러 가지 방법으로 할 수 있지만 lodash를 사용하기 때문에 다음과 같이 로그에 기록합니다.
handleKeyDown: function(e) {
console.log(_.cloneDeep(e)));
}
또한 기본(원래) 브라우저 이벤트를 에서 추출할 수도 있습니다.Synthetic*Event를 경유하여 포장하다nativeEvent소유물.예.,
handleKeyDown: function(e) {
console.log('keyDown:event', e.nativeEvent);
},
(에 대한 @Ricardo의 메모와 마찬가지로e.persist()React.js 소스 코드를 읽지 않고는 이 사실을 알 수 없습니다.)
언급URL : https://stackoverflow.com/questions/22123055/react-keyboard-event-handlers-all-null
'source' 카테고리의 다른 글
| WordPress 사이트에서 bitnami 배너를 제거하려면 어떻게 해야 합니까? (0) | 2023.03.29 |
|---|---|
| 리액트 타입 스크립트프로젝트에서의 react-app-env.d.ts의 용도는 무엇입니까? (0) | 2023.03.29 |
| Nginx - 하위 디렉토리의 워드프레스, 어떤 데이터를 전달해야 합니까? (0) | 2023.03.29 |
| 2개의 php 어레이 - 하나의 어레이를 다른 어레이의 값 순서로 정렬합니다. (0) | 2023.03.29 |
| 축척된 div의 끌 수 있는 요소에 대한 정확한 드롭 (0) | 2023.03.29 |