问题
I have the following:
class MyTextArea extends React.Component {
handleClick = () => {
this.focus();
}
focus = () => this.ref.focus;
handleRef = (component) => {
this.ref = component;
};
render() {
return (
<div className="magicHelper" onClick={this.handleClick}>
<textarea></textarea>
</div>
);
}
}
My CSS:
.magicHelper {
width: 100%;
height: 100%;
}
textarea {
line-height: 32px;
}
I need this because I need the textarea's placeholder are to be horizontally and vertically centered in the page. Given textareas can't vertically center text, I need to keep the height of the textarea short. I therefore need to make it so when the user clicks outside of the textarea, thinking they are clicking the the textarea, the textarea auto focuses in.
This is causing a eslint error w: click handlers need at least one keyboard listener. How can I update the above to pass eslint?
回答1:
https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/click-events-have-key-events.md
It seems this rule is to enforce Accessibility standards.
Based on this, change your code to do something like this
<div className="magicHelper" onClick={this.handleClick} onKeyDown={this.handleClick}>
You could also disable the rule in eslint, I suppose it depends on preference.
回答2:
from ESLINT documents:
Enforce onClick is accompanied by at least one of the following: onKeyUp, onKeyDown, onKeyPress. Coding for the keyboard is important for users with physical disabilities who cannot use a mouse, AT compatibility, and screenreader users.
in this case you can either disable the rule or update your code. its better to update your code to meet the web standards.
class MyTextArea extends React.Component {
handleClick = () => {
this.focus();
}
handleKeyDown = (ev) => {
// check keys if you want
if (ev.keyCode == 13) {
this.focus()
}
}
focus = () => this.ref.focus;
handleRef = (component) => {
this.ref = component;
};
render() {
return (
<div className="magicHelper" onClick={this.handleClick} onKeyDown={this.handleKeyDown}>
<textarea></textarea>
</div>
);
}
}
来源:https://stackoverflow.com/questions/48575674/how-to-add-a-keyboard-listener-to-my-onclick-handler