I have displayProjectTable
that gets state from reducer projectData
and populates itself.
Currently displayProjectTable
has a local state that stores focusedRowID
. My problem is that I want other components to have the ability to modify the focusedRowID
and it's content.
Some examples:
-A component tells displayProjectTable
to add 1 to focusedRowID
(ie. focus on the next row)
-A component tells displayProjectTable
to set value of row at focusedRowID
to "test". Because displayProjectTable
gets its state from projectData
, that reducer's state will have to be changed at the focusedRowID
index.
A possible solution is to store focusedRowID
inside of the projectData.js
reducer. However, this seems like a bad solution to me. The projectData
reducer is responsible for fetching, storing, and saving projectData
. Would it really make sense to store a focusedRowID
when projectData
shouldn't even know what a row is?
Top comments (3)
Some solutions that I see to your problem:
The second option is interesting to me. You mean I could make a reducer specific to the table such as
projectTableReducer
which would store the focusedRowID?I get that I could change the focusedRowID from other components using the actions for
projectTableReducer
, but I don't understand how I could modify a row inprojectData
reducer fromprojectTableReducer
.Personally I would go with the 3rd option and use context.
I use the store to store data in it, not the app state, but you can do as you like, both cases give you the same options.
You can create an appState reducer and store variables there, you can change the through actions and reducers and get them through selectors. Or you can create an app context provider and consumers.
You can find more on context here