【问题标题】:React : How to change route on onChange event of inputReact:如何在输入的 onChange 事件上更改路由
【发布时间】:2021-08-20 16:47:43
【问题描述】:

每当我在输入字段中输入文本并将输入值传递给<Search /> 组件路由时,我都想更改路由。这是我的输入字段。

<input type="search" value={searchInput} onChange={handleChange} placeholder="Search..." />

这是我创建的路线。

<Route path="/search/:searchInput">
   <Search />
</Route>

我已经处理了输入值,但是当我进入输入框时,我似乎不知道如何更改组件。你能帮我么。我也想将输入值传递给路由。

const [searchInput, setSearchInput] = useState("")

const handleChange = (e) => {
    e.preventDefault();
    setSearchInput(e.target.value)
}

这是我的导航组件:

const Navigation = () => {
  let history = createHashHistory();
  const [searchInput, setSearchInput] = useState("")

  const handleChange = (e) => {
    e.preventDefault();
    setSearchInput(e.target.value)
  }
  useEffect(() => {
    const params = new URLSearchParams();
    if (searchInput) {
      params.append("query", searchInput);
    } else {
      params.delete("query");
    }
    history.push({ search: params.toString() });
  }, [searchInput, history]);

  return (
    <Router>
      <div className='navigation'>
        <div className="right-content">
          <div className="search">
            <img style={{ padding: "2px" }} src={search} alt="search" />
            <input type="search" value={searchInput} onChange={handleChange} placeholder="Search..." />
          </div>
        </div>
      </div>

      <Switch>
        <Route path="/search" component={Search}>
        </Route>
      </Switch>
    </Router>
  )
}

export default Navigation

这是我的搜索组件:

const Search = () => {

    const value = new URLSearchParams(window.location.search).get("query");

    console.log(value)

}

我在导航中导入了搜索组件。我想在输入时进入搜索组件。

【问题讨论】:

  • 你的输入框在哪里?
  • @Shyam 它在我的导航组件中。这是在路由器中。我想将输入值字段从导航组件传递到搜索组件。

标签: javascript reactjs ecmascript-6 react-router react-hooks


【解决方案1】:
 import {Redirect} from "react-router-dom";    
 constructor(props) {
            super(props);
            this.state = {
                redirect: null,   
            }
      }  
      handleChange=(){
          this.setState({
           redirect: "/search/22"
          }); 
      }
      render() {
            if (this.state.redirect) {
                return <Redirect to={this.state.redirect} />
            }
            return (
                <div>
                 <input type="search" value={searchInput} onChange={handleChange} placeholder="Search..." />
                </div>
            );
      }

【讨论】:

    【解决方案2】:

    您可以使用查询参数来实现此目的。

    当您更改输入时,您需要将输入值作为查询字符串附加到 url 。我们可以这样做。

     useEffect(() => {
        const params = new URLSearchParams();
        if (searchInput) {
          params.append("query", searchInput);
        } else {
          params.delete("query");
        }
        history.push({ search: params.toString() });
      }, [searchInput, history]);
    

    一旦设置了查询参数,我们就可以从下面的选择组件中读取它。

     const value = new URLSearchParams(window.location.search).get("query");
    

    工作示例 - Search Params Example

    【讨论】:

    • 我有查询字符串。但不能将它传递给我的意思是搜索的另一个组件。在您的示例中它正在工作,但我无法使用该值。它返回 null。
    • 将路径中的路径从 path="/search/:searchInput" 更改为 path="/search"
    • 组件添加代码。并发布您如何阅读搜索参数。
    • 我有。但它甚至不会进入搜索组件。
    • 在我的搜索组件中,我正在读取 const value = new URLSearchParams(window.location.search).get("query"); 之类的值
    猜你喜欢
    • 2016-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-08
    • 2011-10-24
    • 2023-02-08
    • 2021-06-10
    • 2023-01-03
    相关资源
    最近更新 更多