Всякий раз, когда я нажимаю Enter, когда фокусируюсь на текстовом поле ввода, неявная отправка из элемента ввода запускает отправку и перезагружает страницу:
import React, { Component } from "react";
import { Col, Button, Form, FormGroup, Label, Input } from "reactstrap";
import "./SearchBar.css";
class SearchBar extends Component {
constructor(props) {
super(props);
this.state = {
term: ""
};
this.handleTermChange = this.handleTermChange.bind(this);
this.handleSearch = this.handleSearch.bind(this);
this.handleEnter = this.handleEnter.bind(this);
}
handleTermChange(e) {
this.setState({ term: e.target.value });
}
handleSearch() {
this.props.searchEngine(this.state.term);
}
handleEnter(e) {
if (e.key === 13) {
this.handleSearch();
}
}
render() {
return (
<Form className="searchbox">
<FormGroup row>
<Label for="searchId" sm={2}>
Search Engine
</Label>
<Col sm={10}>
<Input
type="text"
placeholder="Enter Sth"
onChange={this.handleTermChange}
onKeyDown={this.handleEnter}
/>
</Col>
</FormGroup>
<FormGroup>
<Col sm="2">
<div className="">
<Button
onClick={this.handleSearch}
className="btn"
>
Submit
</Button>
</div>
</Col>
</FormGroup>
</Form>
);
}
}
export default SearchBar;
Я просто хочу вызвать функцию поиска с помощью обработчикакак указано выше, но избегайте неявной отправки, т. е. той же функции при нажатии на кнопку Submit
.Иначе это просто перезагрузить страницу и вымыть возвращенный результат.
Что я сделал не так?Я не сталкивался с этой проблемой в основном с тем же шаблоном раньше.
Зависимости:
- "Reactionstrap": "^ 6.5.0"
- "bootstrap": «^ 4.1.3»
- «реагировать»: «^ 16.6.3»
- «реагировать»: «^ 16.6.3"
- "реагировать-сценарии ":" 2.1.1 "