-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Ambiguous/misleading/incorrect documentation regarding PropTypes.node
.
#154
Comments
a raw DOM element isn't something that can be rendered, so there's no need to exclude it from the definition "anything that can be rendered" |
"You're technically correct! The best kind of correct!" Your mental model of what "can be rendered" may be entirely accurate in context of React specifically, but using that for documentation without being mindful of how other folks less steeped in React might perceive things is just creating landmines for people -- as my teammate and I discovered the hard way. Both I, and my teammate were misled by this because our mental model of what "can be rendered" absolutely includes DOM elements. DOM elements are a thing the browser renders. The typical reader of the documentation for those project will most likely not have read either the documentation to React end-to-end, or the code for React itself. They will most likely not have the same mental model as you do. Documentation isn't useful unless it's written for the reader. In this case, the only way I was able to correct my understanding was to read through the code for this project. While that's always worth doing, frankly I would be happier if there had been no documentation at all because I would have spent less total time sorting things out. I'd ask that instead of just dismissing this concern out of hand you consider that this is a rare opportunity to make your product more valuable by just... changing a few words. No complex engineering. No regression testing. Just shuffling a few words around. How awesome is that? |
What about "Anything that can be rendered by React: numbers, strings, elements or an array (or fragment) containing these types." (since the list is exhaustive) |
That doesn't really address the source of confusion here: "Element" remains ambiguous from the perspective of an outsider. Is there a particular page of React docs that talks about what is "renderable"? If so, perhaps you could link to that to allow people to fill out their understanding without duplication of effort? |
That's certainly an improvement, I think. |
* Include CI for master branch and PR's In accordance with facebook#19, includes config for TravisCI to run test reports on the master branch and PR's to the master branch. - Includes .travis.yml config file - Includes current CI status badge in README Closes facebook#19. * Point readme to correct docs for production builds (facebook#153) After an update to the docs, the production build was pointing to an outdated link. This commit directs the link to the appropriate location in the React docs. * 15.6.1 * Add 15.6.1 to CHANGELOG * Updated vars with consts and lets in PropTypesProductionReact15-test.js * Updated vars to consts and lets in PropTypesDevelopmentReact15.js * Updated vars to consts and lets in PropTypesDevelopmentStandalone-test.js * Updated vars to consts and lets in PropTypesProductionStandalone-test.js * Add example for `PropTypes.exact` * Show that shapes can have required properties * Move explanation of `isRequired` and show it in `PropTypes.shape` * Remove trailing spaces * Remove fbjs dependency * Preserve "Invariant Violation" name * 15.6.2 * .com * Add support for objects with a null prototype in objectOf * Replace `hasOwnProperty` with the more robust "has" package * Revert "Replace `hasOwnProperty` with the more robust "has" package" This reverts commit e6a9b28. * Inline the `has` module * missed semicolon * [Tests] use componentName in getPropTypeWarningMessage instead of hard-coded testComponent * [Fix] Fix `oneOf` when used with Symbols - Fixes error due to an attempt to coerce a Symbol to a string - Improves formatting of the "expected" portion of the generated warning, outputting for example `["Symbol(A)","Symbol(B)"]` rather than `[null,null]` Fixes facebook#10 * Completely remove envify in favor of loose-envify Closes facebook#203. * [New] Add `.elementType` * Add license to readme * [Fix] Support validation when hasOwnProperty is not in prototype Closes facebook#183; relates to facebook#112. * [Docs] fix relative release date to be absolute * [Docs] Fix typo in example * [New] add `PropTypes.resetWarningCache` * [dev deps] update `loose-envify` * `oneOf`: improve warning when multiple arguments are supplied Adds a different warning message for multiple arguments supplied to oneOf. A common mistake is to write oneOf(x, y, z) instead of oneOf([x, y, z]) and this should help developers identifying the error. * [changelog] update repo links * v15.7.0 * [Fix] avoid template literal syntax Fixes facebook#255. Fixes facebook#254. * v15.7.1 * [Tests] add `eslint`; run more travis tests * [Tests] run tests with multiple react versions * [Fix] move `loose-envify` back to production deps, for browerify usage Fixes facebook#203 * [Tests] add additional passing tests * [Fix] ensure nullish values in `oneOf` do not crash Fixes facebook#256. * [dev deps] update `browserify` * v15.7.2 * [Docs] Improve wording for `checkPropTypes` * [Docs] `PropTypes.node`: add link to react docs Fixes facebook#154. * [meta] use `in-publish` to avoid running the build on install * `checkPropTypes`: Friendlier message when using a type checker that is not a function * [Tests] test the build process * [New] Add type check for validator for 'shape' and 'exact' Fixes facebook#220. * [Tests] fix broken tests * [Refactor] extract `has` * [Docs] Add instructions for intentional inclusion of validation in production. * [New] `oneOfType`: Add expected types to warning Adds data object to returned error in checker so that the expected types can be accessed from within oneOfType check. Also, updates the tests slightly. Fixes facebook#9. * [Tests] Fixed typo: 'Any type *should* accept any value' * [Dev Deps] update `eslint` * [Deps] update `react-is` * [Dev Deps] update `browserify`, `bundle-collapser`, `react`, `uglifyify`, `uglifyjs` * [Docs] Typo fix in example Reverts an incorrect typo fix made in facebook#248. Closes facebook#299 * [Tests] Fix spelling * doc: highlighted the func name (facebook#321) * [readme] Clarify usage of `elementType` Closes facebook#334. * [Dev Deps] update `bundle-collapser`, `eslint`, `in-publish`, `react` * [Deps] update `react-is` * Add a package `sideEffects` field. * Bump sshpk from 1.13.1 to 1.16.1 Bumps [sshpk](https://github.com/joyent/node-sshpk) from 1.13.1 to 1.16.1. - [Release notes](https://github.com/joyent/node-sshpk/releases) - [Commits](TritonDataCenter/node-sshpk@v1.13.1...v1.16.1) Signed-off-by: dependabot[bot] <[email protected]> * Use GH Actions This migrates to a more accessible platform * [eslint] enable some rules Additional ESLint rules: "no-multi-spaces": ["error"], "key-spacing": ["error"] "no-multi-spaces" - Disallow multiple spaces; "key-spacing" - Enforce consistent spacing between keys and values in object literal properties; * Bump path-parse from 1.0.6 to 1.0.7 Bumps [path-parse](https://github.com/jbgutierrez/path-parse) from 1.0.6 to 1.0.7. - [Release notes](https://github.com/jbgutierrez/path-parse/releases) - [Commits](https://github.com/jbgutierrez/path-parse/commits/v1.0.7) --- updated-dependencies: - dependency-name: path-parse dependency-type: indirect ... Signed-off-by: dependabot[bot] <[email protected]> * Bump tmpl from 1.0.4 to 1.0.5 Bumps [tmpl](https://github.com/daaku/nodejs-tmpl) from 1.0.4 to 1.0.5. - [Release notes](https://github.com/daaku/nodejs-tmpl/releases) - [Commits](https://github.com/daaku/nodejs-tmpl/commits/v1.0.5) --- updated-dependencies: - dependency-name: tmpl dependency-type: indirect ... Signed-off-by: dependabot[bot] <[email protected]> * [deps] regenerate yarn.lock * [readme] Fix branch name (master -> main) * [Dev Deps] update `eslint` * [New] add `PropTypes.bigint` Closes facebook#355 * v15.8.0 * [Tests] do not fail fast; add react 17 * [meta] Fix formatting in CHANGELOG.md * [Tests] convert normal `it` functions to arrow functions * [Tests] add missing test coverage * [Fix] fix crash when a custom propType return lacks `.data`; call `hasOwnProperty` properly Fixes facebook#369 * [Dev Deps] update `eslint` * v15.8.1 * docs: add GH button in support of Ukraine (facebook#375) ## Summary Our mission at Meta Open Source is to empower communities through open source, and we believe that it means building a welcoming and safe environment for all. As a part of this work, we are adding this banner in support for Ukraine during this crisis. * [Deps] `yarn upgrade` * build: harden ci.yml permissions Signed-off-by: Alex <[email protected]> * Bump semver from 5.7.1 to 5.7.2 Bumps [semver](https://github.com/npm/node-semver) from 5.7.1 to 5.7.2. - [Release notes](https://github.com/npm/node-semver/releases) - [Changelog](https://github.com/npm/node-semver/blob/v5.7.2/CHANGELOG.md) - [Commits](npm/node-semver@v5.7.1...v5.7.2) --- updated-dependencies: - dependency-name: semver dependency-type: indirect ... Signed-off-by: dependabot[bot] <[email protected]> * Bump ua-parser-js from 0.7.32 to 0.7.33 Bumps [ua-parser-js](https://github.com/faisalman/ua-parser-js) from 0.7.32 to 0.7.33. - [Release notes](https://github.com/faisalman/ua-parser-js/releases) - [Changelog](https://github.com/faisalman/ua-parser-js/blob/master/changelog.md) - [Commits](faisalman/ua-parser-js@0.7.32...0.7.33) --- updated-dependencies: - dependency-name: ua-parser-js dependency-type: indirect ... Signed-off-by: dependabot[bot] <[email protected]> * remove production env tests as we do not have any production env tests * update --------- Signed-off-by: dependabot[bot] <[email protected]> Signed-off-by: Alex <[email protected]> Co-authored-by: Joe Fraley <[email protected]> Co-authored-by: Quinn Stearns <[email protected]> Co-authored-by: Brandon Dail <[email protected]> Co-authored-by: Brandon Dail <[email protected]> Co-authored-by: Barry <[email protected]> Co-authored-by: Christian Paul <[email protected]> Co-authored-by: Dan Abramov <[email protected]> Co-authored-by: Julien Mourer <[email protected]> Co-authored-by: ksmolniy <[email protected]> Co-authored-by: C. T. Lin <[email protected]> Co-authored-by: Jim Fitzpatrick <[email protected]> Co-authored-by: Augustin Trancart <[email protected]> Co-authored-by: Benoit Tremblay <[email protected]> Co-authored-by: Dominik Ferber <[email protected]> Co-authored-by: Joseph A. Szczesniak <[email protected]> Co-authored-by: Troy Rhinehart <[email protected]> Co-authored-by: Patrick Way <[email protected]> Co-authored-by: Jordan Harband <[email protected]> Co-authored-by: Wojciech Maj <[email protected]> Co-authored-by: NoScripter <[email protected]> Co-authored-by: Gregory Desfour <[email protected]> Co-authored-by: Asbjørn Hegdahl <[email protected]> Co-authored-by: NoScripter <[email protected]> Co-authored-by: rgraffbrd <[email protected]> Co-authored-by: Josh Alling <[email protected]> Co-authored-by: weiluntong <[email protected]> Co-authored-by: Conrad Buck <[email protected]> Co-authored-by: Mark McCann <[email protected]> Co-authored-by: John Bampton <[email protected]> Co-authored-by: Haseeb Khan <[email protected]> Co-authored-by: G Roques <[email protected]> Co-authored-by: Jayden Seric <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Paul O’Shannessy <[email protected]> Co-authored-by: Konstantin Popov <[email protected]> Co-authored-by: Dmitry Vinnik <[email protected]> Co-authored-by: Alex <[email protected]>
Upon reading this, I -- and a member of my team -- came away with the understanding that
PropTypes.node
was suitable for things such as DOM nodes/elements (e.g.event.currentTarget
). After poring over the code here, it appears that this is not the case and that the only type of "node" that's allowed is a React node.I'd recommend at least updating the wording on this. Perhaps something of the form:
The text was updated successfully, but these errors were encountered: