Javascript React.js w/React路由器:我的组件是否应该';反应';要更改url,还是相反?

Javascript React.js w/React路由器:我的组件是否应该';反应';要更改url,还是相反?,javascript,reactjs,react-router,url-routing,state,Javascript,Reactjs,React Router,Url Routing,State,我的问题更多的是关于我的应用程序的路由的高级设计决策,以及随后渲染的组件 我的应用程序有多个“页面”/“部分”。导航到这些部分只需使用基本路由即可。其中一个部分是“lookbook”,有一个类似Instagram的照片提要(路径是“/lookbook”)。如果我要在这个photofeed中点击一张照片,我希望一个模式与一些额外数据的扩展照片一起出现 我的问题归结为在提要中这些照片的onClick事件上应该发生什么。(这个非常具体的功能是我的问题来源,因为我相信它将决定我应该如何设计组件的工作方式

我的问题更多的是关于我的应用程序的路由的高级设计决策,以及随后渲染的组件

我的应用程序有多个“页面”/“部分”。导航到这些部分只需使用基本路由即可。其中一个部分是“lookbook”,有一个类似Instagram的照片提要(路径是“/lookbook”)。如果我要在这个photofeed中点击一张照片,我希望一个模式与一些额外数据的扩展照片一起出现

我的问题归结为在提要中这些照片的onClick事件上应该发生什么。(这个非常具体的功能是我的问题来源,因为我相信它将决定我应该如何设计组件的工作方式。)

在onClick事件中,以下操作是否更有意义:

A)只需导航到一条路线,比如“/lookbook/photoId”。然后让父Lookbook组件感知URL更改,然后提供我想要的服务


B)更改Lookbook组件的状态,使其在模式内展开单击的照片(无URL更改)。

此问题的答案几乎完全取决于您对问题的看法

A有明确的优势。它更干净,可能更容易编码,是我的首选。每张照片都会根据ID将您指向不同的URL,并且一个独立的组件将满足它的需要

另一方面,B将使photoID成为父组件(索引页)状态的一部分。根据此状态,您可以创建模态。这将使您的组件比a稍微复杂一点,但是在这里,您只有一个组件完成整个工作,并且您的组件之间的责任划分是明确的


任何一种方法都是绝对正确的,这取决于您对组件的看法以及每个组件所服务的目标。

在react中,您应该向提要组件传递回调函数,并在单击提要映像时使用回调函数更改回溯组件的状态。这是react方法,现在完全取决于您的状态更改是表示URL更改还是表示模式状态更改。

我几乎肯定会为模式选择B,尽管这可能只是个人偏好。。我不能说客观上是正确的,我会说A有它的优势。您正在使用URL状态进行其他操作,因此继续使用该状态更为方便,而且它还提供了一种直接进入该状态的方法。如果是组件状态,则无法直接导航到在模式中打开的照片,这可能是一个很好的用例。我确实想实现可共享的URL,所以A似乎正朝着这个方向发展。现在,如果我沿着A路径走,路径应该是什么样的?我的嵌套路由(即“lookbook/photoId”)会呈现父lookbook组件,然后感知url有一个与之嵌套的id,还是我的嵌套路由会呈现lookbook.js更深的子组件,例如PhotoModal.js?答案的最后一部分,你是说我可以触发URL的更改,然后触发状态的更改,还是说我触发状态的更改,然后触发URL的更改?React完全基于状态,与URL更改无关,你做任何事情都不考虑URL更改。Vaibhav,是的,我明白。但如果我想实现可共享的URL,在社交媒体上共享,我的组件不应该是URL驱动的吗?(URL决定状态)。哦,我的错,是的,如果有URL驱动的东西,那么可以做的是,对于每个提要存储它的详细信息,例如URL等,在状态中。状态对象中的任何内容都会显示在浏览器中。我想这个答案解决了我的问题。根据具体情况,您可以解释如何以及为什么两者都有效。