Document how React treats different attributes
还没有人认领这个 Issue。
- 主要语言
- JavaScript
- 星标
- 11.8k
- 派生
- 7.9k
- 平均合并
- 1 天 11 小时
- 30 天内合并 PR
- 11
描述
This issue was originally reported by @MMeent via facebook/react/issues/9220
Please refer to the original issue for the related discussion thread.
Text of original issue:
As of #9106 there are quite a lot of tests for HTML's boolean properties on tags. According to these tests HTML properties should get rendered into empty strings or not set, e.g. <div hidden={true} /> should render to <div hidden="" /> and <div hidden={false} /> should render to <div />.
But when I look further, there are other tests which do similar things: <a href={true} /> should render to <a href="true" />. This means that if I take true as my property value, I will not know what the result will be.
The issue being: React currently does not have a clearly-defined and documented way with which they handle their props. Could the docs be updated to specify which type of prop will result in what? e.g. "any number gets parsed to a string (using Number.toString()), an object gets stringified by using arg => Object.entries(arg).map(([key, val]) => ${key}: ${val};).join(), and booleans toggle the property."
In short, these are the bugs/undocumented features/contradictions that the tests expect to happen, plus my expectations:
prop={true}gets parsed toprop=""orprop="true"for select properties
expected: eitherprop=""orprop="prop", not both // as per checked=checked HTML standardprop=""gets parsed asprop=""or
expected:prop=""prop="prop"might get parsed as eitherprop="prop",prop=""or even
expected:prop="prop"prop="foo"=>prop=""orprop="foo"
expected:prop="foo"prop={false}=>orprop="false"
expected:prop={['foo', 'bar']}=>prop=""orprop="foo,bar"(hand-tested, no automatic test available)
expected:prop="foo bar"prop={{foo: 'bar', baz: 5}}=>prop=""orprop="foo: bar; baz: 5;"orprop="[object Object]"(hand-tested, no automatic test available)
expected:prop="foo: bar; baz: 5"// as per style object transform
Hacky showcase: https://jsfiddle.net/ox8a7vfe/3/
Are these features or are these bugs?
If they are bugs, and work is going to be done on the props value parsing, then the following might be a nice addition:
prop={{foo: true, bar: true, baz: false}}=>prop="foo bar"// render alltruekeys, disregardfalsekeys, like classNames.
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
调研方向
从 facebook/react/issues/9220 的原始讨论以及其中引用的 ReactDOMServerIntegration-test.js 和 ReactDOMComponent-test.js 用例开始。将文档中描述的行为与示例和测试进行比较,然后更新 React 文档,以便明确规定属性值的处理方式,并让所列用例具有一致的指导说明。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- javascript, react
- 领域
- documentation
- Issue 类型
- 文档
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 活跃度
- 冷清
- 描述清晰度
- 基本清楚
- 新手友好度
- 35/100