我如何在提交我的表单时将结果重定向到 React 中的另一个页面
How can I on Submit my Form redirect the Results to another Page in React
我正在尝试让搜索结果显示在 React Js 的另一个页面上。现在,当我提交我的搜索表单时,它会在我不想要的同一页面上显示结果。在过去的 4 个小时里,我一直在尝试这样做(我是 ReactJS 的新手),我在网上看到了很多建议,但似乎没有任何效果像我希望的那样。
我什至尝试过使用 react redux、react router 和更多在线示例,但没有用,请注意我做错了什么。
我该如何处理?关于我在下面提供的代码,我希望有人可以让我走上正确的轨道,也欢迎您 suggestions/feedback。
提前致谢。
这是我负责表单的搜索引擎组件
const SearchEngine = (props) => {
return (
<div>
<h3 className="spacer">Search Engine</h3>
<form onSubmit={props.getTrend}>
<div class="input-group md-form form-sm form-2 pl-0">
<input class="form-control my-0 py-1 red-border" type="text" name="keyword" placeholder="Enter your keyword" aria-label="Search" />
<div class="input-group-append">
<button class="input-group-text red lighten-3" id="basic-text1"><i class="fa fa-search text-grey" aria-hidden="true"></i></button>
</div>
</div>
</form>
</div>
);
}
export default SearchEngine;
这是我想显示结果的结果组件
const Results = (props) => (
<div>
Hello
</div>
);
export default Results;
收到您的 api 电话后,您可以推送并转到另一个页面。对于您来说,它可能看起来像这样。
getTrend = async (e) => {
e.preventDefault();
const keyword = e.target.elements.keyword.value;
const api_call = await fetch(`http://localhost:8081/trend/twitter?keyword=${keyword}`); //make API call
const data = await api_call.json();
if (keyword) {
this.setState({
tweets: data
});
console.log(this.state.tweets);
this.props.history.push({
pathname: '/results',
state: { detail: data }
})
}
else {
this.setState({
tweets: undefined,
error: "Please enter the values"
});
}
}
然后,在您的 App.js 中,您可以使用
访问它
props.location.state.detail
这可能需要您将 withRouter 用作 HOC。我要改变的一件事是在 componentDidMount 中获取你的 api。但是,如果你使用钩子来解决这个问题会容易得多。虽然它可能需要一些折射,但您可以使用挂钩进行 api 调用,这更容易起床 运行.
我正在尝试让搜索结果显示在 React Js 的另一个页面上。现在,当我提交我的搜索表单时,它会在我不想要的同一页面上显示结果。在过去的 4 个小时里,我一直在尝试这样做(我是 ReactJS 的新手),我在网上看到了很多建议,但似乎没有任何效果像我希望的那样。
我什至尝试过使用 react redux、react router 和更多在线示例,但没有用,请注意我做错了什么。
我该如何处理?关于我在下面提供的代码,我希望有人可以让我走上正确的轨道,也欢迎您 suggestions/feedback。
提前致谢。
这是我负责表单的搜索引擎组件
const SearchEngine = (props) => {
return (
<div>
<h3 className="spacer">Search Engine</h3>
<form onSubmit={props.getTrend}>
<div class="input-group md-form form-sm form-2 pl-0">
<input class="form-control my-0 py-1 red-border" type="text" name="keyword" placeholder="Enter your keyword" aria-label="Search" />
<div class="input-group-append">
<button class="input-group-text red lighten-3" id="basic-text1"><i class="fa fa-search text-grey" aria-hidden="true"></i></button>
</div>
</div>
</form>
</div>
);
}
export default SearchEngine;
这是我想显示结果的结果组件
const Results = (props) => (
<div>
Hello
</div>
);
export default Results;
收到您的 api 电话后,您可以推送并转到另一个页面。对于您来说,它可能看起来像这样。
getTrend = async (e) => {
e.preventDefault();
const keyword = e.target.elements.keyword.value;
const api_call = await fetch(`http://localhost:8081/trend/twitter?keyword=${keyword}`); //make API call
const data = await api_call.json();
if (keyword) {
this.setState({
tweets: data
});
console.log(this.state.tweets);
this.props.history.push({
pathname: '/results',
state: { detail: data }
})
}
else {
this.setState({
tweets: undefined,
error: "Please enter the values"
});
}
}
然后,在您的 App.js 中,您可以使用
访问它props.location.state.detail
这可能需要您将 withRouter 用作 HOC。我要改变的一件事是在 componentDidMount 中获取你的 api。但是,如果你使用钩子来解决这个问题会容易得多。虽然它可能需要一些折射,但您可以使用挂钩进行 api 调用,这更容易起床 运行.