【问题标题】:How to clear the input field (remove the search term) after the search?搜索后如何清除输入字段(删除搜索词)?
【发布时间】: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}

标签: reactjs routes


【解决方案1】:

您需要将搜索值传递给输入字段:

<Toolbar searchTerm={this.state.searchTerm} ...
<Search value={props.searchTerm} ...
<input value={props.value} ...

【讨论】:

  • 是的,这确实解决了第一个问题(单击搜索按钮)。任何想法如何解决第二个问题(从一页导航到另一页)?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多