From a6f0948326ce6e63c99422400c84f521a1e86050 Mon Sep 17 00:00:00 2001 From: Nate Hunzaker Date: Tue, 14 Aug 2018 10:49:52 -0700 Subject: [PATCH 01/10] Update attribute-table * Add to-string protection to SSR * Add validation step to inputs * Only validate textarea value prop * Properly handle true/false and NaN * Simplify validation by doing it ahead of time * Tweak toStringValue comment * defaultValue and defaultChecked are no longer reserved words * Use correct type for defaultValue and defaultChecked * Add test coverage and fixes for mixed type selection on options * Improve comment about backwards compatibility with defaultValue * Align defaultValue and defaultChecked with value and checked --- .../AttributeTableSnapshot.md | 36 ++++----- .../src/__tests__/ReactDOMInput-test.js | 20 +++-- .../src/__tests__/ReactDOMSelect-test.js | 43 +++++----- .../ReactDOMServerIntegrationSelect-test.js | 81 ++++++++++++++++++- .../ReactDOMServerIntegrationTextarea-test.js | 71 +++++++++++++++- ...OMServerIntegrationUserInteraction-test.js | 1 + .../src/__tests__/ReactDOMTextarea-test.js | 26 ++++-- .../react-dom/src/client/ReactDOMComponent.js | 13 ++- .../react-dom/src/client/ReactDOMInput.js | 4 +- .../react-dom/src/client/ReactDOMOption.js | 2 +- .../react-dom/src/client/ReactDOMSelect.js | 3 +- .../react-dom/src/client/ReactDOMTextarea.js | 4 +- .../src/server/ReactPartialRenderer.js | 30 ++++--- packages/react-dom/src/shared/DOMProperty.js | 23 ++++-- .../src/shared/ReactDOMUnknownPropertyHook.js | 6 -- .../src/{client => shared}/ToStringValue.js | 6 +- 16 files changed, 282 insertions(+), 87 deletions(-) rename packages/react-dom/src/{client => shared}/ToStringValue.js (80%) diff --git a/fixtures/attribute-behavior/AttributeTableSnapshot.md b/fixtures/attribute-behavior/AttributeTableSnapshot.md index c924b215355dd..4bdc0050b9096 100644 --- a/fixtures/attribute-behavior/AttributeTableSnapshot.md +++ b/fixtures/attribute-behavior/AttributeTableSnapshot.md @@ -2560,16 +2560,16 @@ | `defaultChecked=(-1)`| (changed)| `` | | `defaultChecked=(0)`| (initial)| `` | | `defaultChecked=(integer)`| (changed)| `` | -| `defaultChecked=(NaN)`| (initial, warning, ssr warning)| `` | +| `defaultChecked=(NaN)`| (initial, warning)| `` | | `defaultChecked=(float)`| (changed)| `` | | `defaultChecked=(true)`| (changed)| `` | | `defaultChecked=(false)`| (initial)| `` | -| `defaultChecked=(string 'true')`| (changed)| `` | -| `defaultChecked=(string 'false')`| (changed)| `` | +| `defaultChecked=(string 'true')`| (changed, warning)| `` | +| `defaultChecked=(string 'false')`| (changed, warning)| `` | | `defaultChecked=(string 'on')`| (changed)| `` | | `defaultChecked=(string 'off')`| (changed)| `` | -| `defaultChecked=(symbol)`| (changed, ssr mismatch)| `` | -| `defaultChecked=(function)`| (changed, ssr mismatch)| `` | +| `defaultChecked=(symbol)`| (changed, warning, ssr mismatch)| `` | +| `defaultChecked=(function)`| (changed, warning, ssr mismatch)| `` | | `defaultChecked=(null)`| (initial)| `` | | `defaultChecked=(undefined)`| (initial)| `` | @@ -2593,9 +2593,9 @@ | `defaultValue=(string 'false')`| (changed)| `"false"` | | `defaultValue=(string 'on')`| (changed)| `"on"` | | `defaultValue=(string 'off')`| (changed)| `"off"` | -| `defaultValue=(symbol)`| (initial, ssr warning)| `` | -| `defaultValue=(function)`| (initial, ssr warning)| `` | -| `defaultValue=(null)`| (initial, ssr warning)| `` | +| `defaultValue=(symbol)`| (initial, warning)| `` | +| `defaultValue=(function)`| (initial, warning)| `` | +| `defaultValue=(null)`| (initial)| `` | | `defaultValue=(undefined)`| (initial)| `` | ## `defaultValuE` (on `` inside `
`) @@ -11785,7 +11785,7 @@ | `value=(-1)`| (changed)| `"-1"` | | `value=(0)`| (changed)| `"0"` | | `value=(integer)`| (changed)| `"1"` | -| `value=(NaN)`| (changed, warning, ssr warning)| `"NaN"` | +| `value=(NaN)`| (changed, warning)| `"NaN"` | | `value=(float)`| (changed)| `"99.99"` | | `value=(true)`| (changed)| `"true"` | | `value=(false)`| (changed)| `"false"` | @@ -11793,9 +11793,9 @@ | `value=(string 'false')`| (changed)| `"false"` | | `value=(string 'on')`| (changed)| `"on"` | | `value=(string 'off')`| (changed)| `"off"` | -| `value=(symbol)`| (initial, warning, ssr warning)| `` | -| `value=(function)`| (initial, warning, ssr warning)| `` | -| `value=(null)`| (initial, warning, ssr warning)| `` | +| `value=(symbol)`| (initial, warning)| `` | +| `value=(function)`| (initial, warning)| `` | +| `value=(null)`| (initial, warning)| `` | | `value=(undefined)`| (initial)| `` | ## `value` (on `` inside `
`) @@ -11820,7 +11820,7 @@ | `value=(string 'off')`| (changed)| `"off"` | | `value=(symbol)`| (initial, warning)| `` | | `value=(function)`| (initial, warning)| `` | -| `value=(null)`| (initial, warning, ssr warning)| `` | +| `value=(null)`| (initial, warning)| `` | | `value=(undefined)`| (initial)| `` | ## `value` (on `` inside `
`) @@ -11845,7 +11845,7 @@ | `value=(string 'off')`| (initial)| `` | | `value=(symbol)`| (initial, warning)| `` | | `value=(function)`| (initial, warning)| `` | -| `value=(null)`| (initial, warning, ssr warning)| `` | +| `value=(null)`| (initial, warning)| `` | | `value=(undefined)`| (initial)| `` | ## `value` (on `