mirror of
https://github.com/facebook/react.git
synced 2025-11-01 09:12:30 +00:00
Don't hydrate any properties other than event listeners and text content (#9858)
* Don't hydrate any properties other than event listeners and text content This strategy assumes that the rendered HTML is correct if the tree lines up. Therefore we don't diff any attributes of the rendered HTML. However, as a precaution I ensure that textContent *is* updated. This ensures that if something goes wrong with keys lining up etc. at least there is some feedback that the event handlers might not line up. With what you expect. This might not be what you want e.g. for date formatting where it can different between server and client. It is expected that content will line up. To ensure that I will in a follow up ensure that the warning is issued if it doesn't line up so that in development this can be addressed. The text content updates are now moved to the commit phase so if the tree is asynchronously hydrated it doesn't start partially swapping out. I use the regular update side-effect with payload if the content doesn't match up. Since we no longer guarantee that attributes is correct I changed the bad mark up SSR integration tests to only assert on the textContent instead. * Hydrate text node if possible Currently we're never matching text nodes so we need to properly branch.
This commit is contained in:
committed by
GitHub
parent
7b16a46e0c
commit
262b9c72f5
@@ -1,5 +1 @@
|
||||
src/renderers/dom/shared/__tests__/ReactDOMServerIntegration-test.js
|
||||
* should not blow away user-entered text on successful reconnect to an uncontrolled checkbox
|
||||
* should not blow away user-entered text on successful reconnect to a controlled checkbox
|
||||
* should not blow away user-selected value on successful reconnect to an uncontrolled select
|
||||
* should not blow away user-selected value on successful reconnect to an controlled select
|
||||
|
||||
|
||||
@@ -1226,6 +1226,10 @@ src/renderers/dom/shared/__tests__/ReactDOMServerIntegration-test.js
|
||||
* renders a controlled select with client render on top of good server markup
|
||||
* should not blow away user-entered text on successful reconnect to an uncontrolled input
|
||||
* should not blow away user-entered text on successful reconnect to a controlled input
|
||||
* should not blow away user-entered text on successful reconnect to an uncontrolled checkbox
|
||||
* should not blow away user-entered text on successful reconnect to a controlled checkbox
|
||||
* should not blow away user-selected value on successful reconnect to an uncontrolled select
|
||||
* should not blow away user-selected value on successful reconnect to an controlled select
|
||||
* renders class child with context with server string render
|
||||
* renders class child with context with clean client render
|
||||
* renders class child with context with client render on top of good server markup
|
||||
|
||||
Reference in New Issue
Block a user