因此,我正在为学校开发应用程序,而在问题上停留了大约两天。我正在建立一个从TMDB获取数据的搜索,并且一切正常。当我输入输入时,所有数据都会流入!但是,当我提交并尝试重定向到/ results页面时,该页面链接到在定向到该页面时显示SearchResults的组件,但没有任何反应,它停留在主页上...我尝试了Redirect,但我使用的方式不正确,否则我不应该在这种情况下使用它。这是我的搜索组件的代码,如果您能帮助我,我将不胜感激!:
import React, { Component, Redirect } from 'react';
import axios from 'axios';
class Search extends Component {
state = {
query: '',
results: []
};
getInfo = () => {
axios
.get(
`https://api.themoviedb.org/3/search/tv?api_key=6d9a91a4158b0a021d546ccd83d3f52e&language=en-US&query=${
this.state.query
}&page=1`
)
.then(({ data }) => {
this.setState({
results: data
});
});
};
handleInputChange = e => {
e.preventDefault();
this.setState(
{
query: this.search.value
},
() => {
if (this.state.query && this.state.query.length > 1) {
if (this.state.query.length % 2 === 0) {
this.getInfo();
}
} else if (!this.state.query) {
}
}
);
};
render() {
return (
<div>
<form>
<input
className='search'
placeholder='⌕'
type='text'
ref={input => (this.search = input)}
onChange={this.handleInputChange}
/>
</form>
{this.state.results.length > 0 && (
<Redirect
to={{
pathname: '/results',
state: { results: this.state.results }
}}
/>
)}
</div>
);
}
}
export default Search;
答案 0 :(得分:1)
您是否使用React Router进行路由?您需要更改网址吗?不需要这样的东西。除非您要进行类似QSortFilterProxyModel
之类的事情,否则有人可以/results
送人到/results?q=pulp&piction
只是一个老学校。
对于这样的事情,只需显示您的结果组件
{this.state.results.length && (
<SearchResults results={this.state.results} />
)}
如果您使用的是路由器,并且需要使用学校项目学校的路径,那么您的老师会因愚蠢的业务需求而向我们提供有关您使用的内容的更多信息。
答案 1 :(得分:0)
您可以使用withRouter
注入历史道具,然后执行:history.push(“/results”)
代码将如下所示:
import React, { Component, Redirect } from 'react';
import axios from 'axios';
import { withRouter } from "react-router";
class Search extends Component {
state = {
query: '',
results: []
};
componentDidUpdate(prevProps, prevState) {
const { history } = this.props;
if (prevState.results !== this.state.results) {
history.push('/results');
}
}
getInfo = () => {
axios
.get(
`https://api.themoviedb.org/3/search/tv?api_key=6d9a91a4158b0a021d546ccd83d3f52e&language=en-US&query=${
this.state.query
}&page=1`
)
.then(({ data }) => {
this.setState({
results: data
});
});
};
handleInputChange = e => {
e.preventDefault();
this.setState(
{
query: this.search.value
},
() => {
if (this.state.query && this.state.query.length > 1) {
if (this.state.query.length % 2 === 0) {
this.getInfo();
}
} else if (!this.state.query) {
}
}
);
};
render() {
return (
<div>
<form>
<input
className='search'
placeholder='⌕'
type='text'
ref={input => (this.search = input)}
onChange={this.handleInputChange}
/>
</form>
</div>
);
}
}
export default withRouter(Search);
通过这种方式,您可以使用 push 方法从反应路由器的历史记录中进行编程导航。
在这里您可以了解有关 withRouter HOC的更多信息:https://reacttraining.com/react-router/web/api/withRouter
答案 2 :(得分:0)
“重定向”组件位于“ react-router-dom”包中。 使用这种方法:
import { Redirect } from "react-router-dom";
import React, { Component } from 'react';
class Search extends Component {
//...
render() {
const { results } = this.state
const { props } = this.props
return (results.length > 0 ? <Redirect
to={{
pathname: "/results",
state: {
results: results,
from: props.location
}
}}
/> : <form>
<input
className='search'
placeholder='⌕'
type='text'
ref={input => (this.search = input)}
onChange={this.handleInputChange}
/>
</form>
)
}
}