Chu*_*lds 2 javascript reactjs react-router-dom
当用户在输入字段中按 Enter 时,我尝试重定向到新路线。我有一个标题和搜索组件,我想在每个页面上呈现它。我发现了使用重定向组件、withRouter 组件、使用上下文以及可能将历史对象传递到我的搜索组件(输入字段所在的位置)的不同用例。任何帮助,将不胜感激..
App.js(主要组件)
import React, { Component } from 'react';
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
import Title from './Title';
import Search from './Search';
import Home from './Home';
import Movie from './Movie';
class App extends Component {
render() {
return (
<div>
<Title />
<Search />
<Router>
<Switch>
<Route exact path='/' component={Home} />
<Route path='/movie' component={Movie} />
</Switch>
</Router>
</div>
);
}
}
export default App;
Run Code Online (Sandbox Code Playgroud)
Search.js(输入组件)
import React, { Component } from 'react';
import './Search.css';
class Search extends Component {
constructor(props) {
super(props);
this.state = {
value: ""
}
this.handleChange = this.handleChange.bind(this);
}
handleChange(event) {
this.setState({value: event.target.value});
}
handleSubmit(e) {
if (e.key === 'Enter') {
// TODO redirect user to '/movie'
}
}
render() {
return (
<input type="text" id="searchTitle" placeholder="Search for a movie" onChange={this.handleChange} onKeyPress={this.handleSubmit} value={this.state.input} />
)
}
}
export default Search;
Run Code Online (Sandbox Code Playgroud)
在你的handleSubmit函数中尝试:
this.props.history.push('/movie'); // or whatever
Run Code Online (Sandbox Code Playgroud)
编辑:您可能还需要绑定它
onKeyPress={this.handleSubmit.bind(this)}
Run Code Online (Sandbox Code Playgroud)
并对您传递到路由中的组件执行此操作
const HomePage = () => {
return <Home props={this.props} />
}
Run Code Online (Sandbox Code Playgroud)
...
<Route ... component={HomePage} />
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8887 次 |
| 最近记录: |