I've got a class that looks like this and I'm trying to trigger certain function when the enter key is pressed.
class List extends React.Component {
constructor(props) {
super(props);
this.state = {
...
};
this.setReady = this.setReady.bind(this);
}
componentDidMount() {
//other stuff
document.addEventListener('keydown', this.onKeyPressed.bind(this));
}
componentWillUnmount() {
document.removeEventListener('keydown', this.onKeyPressed.bind(this));
}
handleSearch() {
let value = document.getElementById('search-holder').value;
let names = ['address', 'page'];
let values = [value, 0];
this.updatePublications(names, values, true);
}
onKeyPressed(e) {
if (e.keyCode === 13) {
this.handleSearch();
}
}
render(){...}
}
Basically I wanted to trigger handleSearch() when enter is pressed inside that page. However handleSearch() seems to be triggered when enter key is pressed on the whole webapp. How can I fix this?
List is called only on my App.js
class App extends Component {
constructor(props) {
super(props);
this.state = {
username: null,
};
}
componentDidMount() {
this.setState({username: LocalStorageService.getUsername()});
}
updateUsername = (username) => {
this.setState({username: username});
};
render() {
return (
<div className='App'>
<BrowserRouter basename={process.env.PUBLIC_URL}>
<Suspense fallback={<div>Loading</div>}>
<Navbar updateUsername={this.updateUsername} username={this.state.username} />
<Switch>
<Route exact path='/' component={Home} />
<Route exact path='/List' component={List} />
// all my other routes
</Switch>
</Suspense>
</BrowserRouter>
</div>
);
}
}
export default App;