Reuse connected ConnectedField, ConnectedFields and ConnectedFieldArray #1734
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Redux
connect()
returns a new class. Currently, eachConnectedField
,ConnectedFields
andConnectedFieldArray
is connected to redux, thus creating many classes. This change connectsConnectedField
,ConnectedFields
andConnectedFieldArray
only once.In a field array, if we would like to preserve state of our component, we need to use a key that identifies the element, instead of array index. However, doing so,
Field
,Fields
andFieldArray
detects that it is now bound to a new field name and discards the old connected class andconnect
again. React sees that the class is different, thus discards the old virtual DOM, along with thecomponent
and its state.By using
mapStateToProps(state, ownProps)
andmapDispatchToProps(dispatch, ownProps)
, we can dynamically map according to the current ownProps.name or ownProps.names, thusConnectedField
,ConnectedFields
andConnectedFieldArray
only needs to be connected once. React will see the same class and reuse the virtual DOM, preserving ourcomponent
and its state.