【发布时间】:2019-10-04 10:01:30
【问题描述】:
这是我的 App 组件:
import React, { Component } from 'react';
import {Route, Switch} from 'react-router-dom';
import { withRouter } from 'react-router-dom';
import Toolbar from './components/Navigation/Toolbar/Toolbar';
import Homepage from './components/Homepage/Homepage';
import CategoryPage from './containers/CategoryPage/CategoryPage';
import SingleMealPage from './containers/SingleMealPage/SingleMealPage';
import SearchPage from './containers/SearchPage/SearchPage';
import AboutUsPage from './components/AboutUs/AboutUsPage';
import ContactPage from './components/Contact/ContactPage';
class App extends Component {
state = {
searchTerm: ''
}
searchTermHandler = (mealName) => {
if(mealName !== '') {
const queryParams = [];
queryParams.push(encodeURIComponent(mealName));
const queryString = queryParams.join();
this.props.history.push({
pathname: '/searchResults',
search: '?' + queryString
});
this.setState({searchTerm: ''});
}
}
render() {
return (
<div>
<Toolbar
clickSearch={() => this.searchTermHandler(this.state.searchTerm)}
changeSearch={(event) => this.setState({searchTerm: event.target.value})} />
<Switch>
<Route path="/category" component={CategoryPage} />
<Route path="/singleMeal" component={SingleMealPage} />
<Route path="/searchResults" component={SearchPage} />
<Route path="/aboutUs" component={AboutUsPage} />
<Route path='/contact' component={ContactPage} />
<Route path="/" component={Homepage} />
</Switch>
</div>
);
}
}
export default withRouter(App);
有什么问题?
当我输入搜索词并单击按钮时,它会将我带到 SearchPage,但输入字段中仍存在搜索词。 searchTermHandler 函数内的行 this.setState({searchTerm: ''}); 清除输入值,但不会删除输入字段中的纯文本。
此外,我什至不必单击搜索按钮即可出现此问题。例如,导航到 CategoryPage 并看到在 Homepage 上输入的搜索词仍然存在于 CategoryPage 上就足够了。
在我看来这是一个简单的问题,但我就是想不通。
以防万一您需要,我将发布我的搜索和工具栏组件:
import classes from './Search.css';
const search = (props) => (
<div className={classes.Search}>
<input type="text" placeholder={props.placeholder} onChange={props.change} />
<button type="submit" onClick={props.clicked}><i className="fa fa-search"></i></button>
</div>
);
export default search;
import React from 'react';
import classes from './Toolbar.css';
import Search from '../../UI/Search/Search';
const toolbar = (props) => (
<header className={classes.Toolbar}>
<Search
placeholder="Search recipes"
clicked={props.clickSearch}
change={props.changeSearch} />
</header>
);
export default toolbar;
提前感谢您的帮助。
【问题讨论】:
-
您能否创建一个代码框链接以供参考,以便我们拥有可重现的代码。
-
也许你的输入值应该是 searchTerm input={props.searchTerm}