【发布时间】:2023-04-02 20:14:01
【问题描述】:
我是 React 新手。我正在尝试将一个简单的应用程序与三个组件组合在一起 - 一个父组件(SearchContainer)和两个子组件(SearchForm 和 ResultsContainer)。这个想法是让搜索表单上的输入使用搜索查询更新 SearchForm 的状态。然后有一个用于触发 AJAX 请求的表单的 onSubmit 函数,该请求接受查询、访问 API 并检索搜索结果。现在,onSubmit 函数在页面加载后立即触发,并继续反复触发。我无法弄清楚为什么会这样。代码如下:
SearchContainer(父组件):
var React = require('react');
var ResultsContainer = require('./ResultsContainer.jsx')
var SearchForm = require('./SearchForm.jsx')
var SearchContainer = React.createClass({
getInitialState: function () {
return {
results: null,
formAction: 'http://localhost:3000/search',
formMethod: 'get',
};
},
executeSearch: function(query) {
console.log("executing search");
var data = {
query: query,
};
$.ajax({
url: this.state.formAction,
data: data,
dataType: 'json',
success: this.successFunction,
error: this.errorFunction,
});
},
handleSearch: function(query) {
this.executeSearch(query);
},
successFunction: function(response){
console.log("success");
this.setState({results: response["results"]});
},
errorFunction: function(){
console.log("error");
},
render: function () {
return (
<div className='center-text'>
<SearchForm formAction={this.state.formAction} formMethod={this.state.formMethod} handleSearch={this.handleSearch}/>
<ResultsContainer results={this.state.results}/>
</div>
);
},
});
module.exports = SearchContainer;
搜索表单(子):
var React = require('react');
var ResultsContainer = require('./ResultsContainer.jsx')
var SearchForm = React.createClass ({
getInitialState: function () {
return {
query: "",
};
},
handleChange: function(event) {
this.setState({query: event.target.value});
},
render: function () {
return (
<div>
<form onSubmit={this.props.handleSearch(this.state.query)} >
<input className="query" type="text" placeholder="Search..." onChange={this.handleChange}></input>
<input type="submit" value="Search" ></input>
</form>
</div>
);
},
});
module.exports = SearchForm;
是什么导致handleSearch 函数反复触发?感谢您的帮助。
【问题讨论】:
-
如果其中一个是正确答案,请单击答案左侧的空白复选标记以帮助找到此问题的其他人。
标签: javascript reactjs