reactjs - 想要在反应中将用户发送到具有特定状态的另一个页面
问题描述
所以我的主页上有这个按钮,效果很好:
<Link to="/pageItShouldRedirectTo">
<button class="buttonStyling">
Click to read article 3
</button>
</Link>
它将用户完美地发送到 pageItShouldRedirectTo。在 pageItShouldRedirectTo 上,我有一个按钮列表,它们在下面的空间中呈现不同的组件:
function ArticleSelection() {
const [displayComponent, setDisplayComponent] = useState(null);
return (
<Button onClick={() => setDisplayComponent(<Article1/>)}>Click to see Article 1</Button>
<Button onClick={() => setDisplayComponent(<Article2/>)}>Click to see Article 2</Button>
<Button onClick={() => setDisplayComponent(<Article3/>)}>Click to see Article 3</Button>
{displayComponent}
)}
export default ArticleSelection
这部分本身也很好用。我单击一个按钮,它会在 {displayComponent} 中呈现组件。但是当我使用主页上的按钮时,我希望它与已经呈现的第 3 条一起发送。
我已经尝试了几种方法,但无法使其正常工作。
解决方案
有3个想法如何解决这个问题:
最简单且用途最少的是“提升状态”,如react docs 中所述。将包含有关显示哪篇文章的信息的状态向上移动到公共父级。
使用反应上下文(或任何用于共享状态存储的库,如 react-redux)。这是反应上下文文档。您可以设置,在这种共享状态存储中显示哪些文章。
在 url 中传递数据:
在源组件中:
import url from 'url'
const whereToRedirect = url.format({
pathname: `/pageItShouldRedirectTo`,
query: {
article: "third",
},
})
// whereToRedirect should look something like this: /pageItShouldRedirectTo?article=third
...
<Link to={whereToRedirect }>
<button class="buttonStyling">
Click to read article 3
</button>
</Link>
在目标组件中:
const search = new URLSearchParams(props.location.search)
const article = search.get("article")
不要忘记用withRouter包裹以确保 props.location 存在或使用useLocation钩子。此外,您可以使用useHistory代替Link
重定向,这在这种情况下更方便。
推荐阅读
- laravel - 在 Laravel Model 类上添加自定义方法以在另一个表中插入记录是一种好习惯吗?
- neo4j - CQL 语法异常
- android - Recyclerview中的多个CountDownTimer不同步
- sql-server - SQL Server 中多列的填充函数
- rest - 使用 Camel 的 SFTP 到 REST
- python - 是否可以登录在本地网络上运行的 jupyter 并使用其所有功能?
- powerbi - 将企业一盘文件夹连接到 Power BI
- python - 列出几个绝对网址“urljoin'ed”
- c# - 解析 DateTime 字符串时,小时获取设置为零
- c# - 在 EF6 中使用 LinQ 审核实体读取的最佳方法是什么?