gpt4 book ai didi

javascript - ReactStrap 处理输入隐式提交

转载 作者:行者123 更新时间:2023-11-29 18:46:18 26 4
gpt4 key购买 nike

每当我在输入文本框上按下 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 按钮时的相同功能。否则它只是重新加载页面并清除返回的结果。

我做错了什么?我以前没有遇到过基本相同模式的这个问题。

依赖关系:

  • “ react 器”:“^6.5.0”
  • “ Bootstrap ”:“^4.1.3”
  • “ react ”:“^16.6.3”
  • "react-dom": "^16.6.3"
  • “ react 脚本”:“2.1.1”

最佳答案

我发现它是 <Form>触发隐式提交的元素。我把它改成<Form className="searchbox" onSubmit={this.handleSubmit}>并添加一个新功能:

handleSubmit(e) { 
e.preventDefault();
this.handleSearch();
}

根据问题修改的完整工作代码:

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);
this.handleSubmit = this.handleSubmit.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();
}
}

handleSubmit(e) {
e.preventDefault();
this.handleSearch();
}

render() {
return (
<Form className="searchbox" onSubmit={this.handleSubmit}>
<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;

关于javascript - ReactStrap 处理输入隐式提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53746769/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com