Reputation: 3229
So I'm still learning React, but I feel like I understand at least the "basics". However, Routing with React router and just general "architecture" is where I'm getting a little lost at.
I'm making a personal project app, but ill keep my descriptions/components generic for the explanation. Essentially I have 3 Main components right now:
<Table/>
(Rendered in "App" and also the main /
URL route, it's essentially just a bootstrap table. Also contains my state
which is an array of objects (That will be eventually retrieved via JSON via a GET
request to an API)
<Row/>
(A single row of data on the table, represented by 1 object in the array of objects from the state provided in <Table/>
. Also contains a button that takes you to the "View" page/component below)
<View/>
(What is going to be a "View/Details" page for the Row)
So I imagine my route for <View/>
is going to be something like <Route path="/:id/view" children={<View/>} />
(Keeping it super simple and generic right now just for the explanation)
Sidenote: How come sometimes I see <Route>
wrapping a component and sometimes I see <Route>
defined with the children
prop pointing at the Component to render?)
Anyways...the button in <Row/>
will be a <Link to={'{$props.id}/view'}>
I think....however how exactly do I pass the props down to <View/>
based on the :id
param? I need to pass the data I receive in the <Row/>
component onto the <View/>
component (Because within the <Row/>
component is where I link to <View/>
.
I suppose ONE option would be to do something like let {id} = useParams();
and then do a GET request specific for that particular resource from the API. But considering I'm already passing the data down to each row and it's available in the state within <Table/>
it seems like an unnecessary HTTP request.
Im probably making this more complex than I need to, but I need to pass the "data" all the way down from <Table/>
to the <View/>
component depending on the data id
. And I'm not really sure how to set up React router to do that. Hopefully what I'm asking makes sense.
Upvotes: 0
Views: 3409
Reputation: 1592
To answer your first question, I'll reference the react-router documentation as this is answered in the subsection named "route render methods".
The tldr of the above is simply that the "preferred" method of rendering components via <Route/>
is by supplying actual children to the component. However, there are other methods and specific use cases that go along with each.
As for the core issue you're asking about: What you'll want to do is use an object in the <Link />
component that persists a state to the <View />
element that has all of the information that it will need. You can find react-router's documentation on this here.
Upvotes: 1