1
我有一个带有导航栏组件的顶栏菜单,另一个组件由具有文本输入的窗体组成,该窗体包含一个文本输入,用于更改父导航到的应用程序组件的状态。 Nav位于路由器之外,它具有更改路由的链接。当使用React-Router提交输入值时更改路由
NAV:
import React from 'react';
import {NavLink} from 'react-router-dom';
import SearchInput from './search-input';
var Nav = (props) =>{
\t return(
\t \t \t <nav className="top-bar main-navigation">
\t \t \t \t <div className="top-bar-left">
\t \t \t \t <ul className="menu">
\t \t \t \t \t <li>
\t \t \t \t \t \t <NavLink className='logoText' exact to='/'>
\t \t \t \t \t \t \t some text
\t \t \t \t \t \t </NavLink>
\t \t \t \t \t </li>
\t \t \t \t \t <li>
\t \t \t \t \t \t <SearchInput search={props.executeSearch}/>
\t \t \t \t \t </li>
\t \t \t \t </ul>
\t \t \t \t </div>
\t \t \t </nav>
\t)
}
export default Nav;
父组件传递的功能,NAV和NAV到搜索输入,这改变了应用程序的状态。当表单提交时,我需要将路由重定向到一个名为'/ search'的新路由,但是我无法设置重定向到使用来自react-router的重定向搜索。
这里是应用程序组件和搜索栏组件:
APP:
import React,{Component} from 'react'
import ReactRouter, {BrowserRouter, Route, Switch, Redirect} from 'react-router-dom';
var Router = BrowserRouter;
import api from '../api/api';
import Nav from './nav';
import GameView from './main-view';
import Home from'./home';
import Search from './search';
class App extends Component {
constructor(props){
super(props);
this.state={
searchResult:null,
redirect:false
}
this.search= this.search.bind(this);
}
search(term,type){
api.searchElements(term,type)
.then((searchResult)=>{
console.log(searchResult);
this.setState({searchResult});
})
.catch((e)=>{
console.log(e);
})
}
render() {
return (
<Router>
<div>
<Nav executeSearch={this.search}/>
<Switch>
<Route exact path='/' component={Home}/>
<Route path='/main' component={MainView}/>
<Route path='/search' component={Search}/>
</Switch>
</div>
</Router>
)
}
componentDidMount() {
document.title = 'My page';
}
}
module.exports = App;
import React, {Component} from 'react';
import ReactRouter, {Redirect} from 'react-router-dom';
import api from '../api/api';
export default class SearchInput extends Component{
\t constructor(props){
\t \t super(props);
\t \t this.state = {
\t \t \t term: null
\t \t }
\t }
\t onInputTerm(term){
\t \t this.setState({term});
\t }
\t onSumbitTerm(term){
\t \t this.props.search(term,'games');
\t }
\t render(){
\t \t return(
\t \t \t \t <div className='search-bar' >
\t \t \t \t \t <form
\t \t \t \t \t \t onSubmit={(e)=>{
\t \t \t \t \t \t \t \t e.preventDefault();
\t \t \t \t \t \t \t \t this.onSumbitTerm(e.target.searchValue.value);
\t \t \t \t \t \t \t }}
\t \t \t \t \t >
\t \t \t \t \t \t <input
\t \t \t \t \t \t \t name='searchValue'
\t \t \t \t \t \t \t type='text'
\t \t \t \t \t \t \t onChange={(e)=>{this.onInputTerm(e.target.value)}}
\t \t \t \t \t \t />
\t \t \t \t \t </form>
\t \t \t \t </div>
\t \t \t);
\t }
}
我很新反应,对不起,如果我提问真的很愚蠢。提前致谢。