美文网首页每周500字@IT·互联网首页投稿(暂停使用,暂停投稿)
JSX那些不一致的标准属性[一源一世界][之React]

JSX那些不一致的标准属性[一源一世界][之React]

作者: 蛋先生DX | 来源:发表于2016-07-11 14:52 被阅读152次

通过阅读React的关于JSX的官方文档,我们知道在JSX声明标准HTML元素(如div)的属性时,有一些比较特殊的在命名上与标准属性有点出入,例如className

var myDivElement = <div className="foo" />;

经过JSX编译器后,它的实际JS代码如下:

var myDivElement = React.createElement("div", { className: "foo" });

显示,class是Javascript的保留关键字,所以不能当对象的key用,那还有哪些属性呢?我们直接看源码吧。

HTMLDOMPropertyConfig.js的源码中,就声明了JSX与HTML标准属性命名上不同的属性对应关系,目前一共有4个。

DOMAttributeNames: {
  acceptCharset: 'accept-charset',
  className: 'class',
  htmlFor: 'for',
  httpEquiv: 'http-equiv',
},

DOMProperty.jsinjectDOMPropertyConfig,就通过DOMAttributeNames取得JSX属性对应的标准属性及其值

if (DOMAttributeNames.hasOwnProperty(propName)) {
  var attributeName = DOMAttributeNames[propName];
  propertyInfo.attributeName = attributeName;
  ...
}

这样子就简单地完成了JSX属性与HTML标准属性的转换了


题外话,从JSX Gotchas这篇文章谈到对于标准的HTML元素,React只会渲染标准属性(如name),自定义的属性(如daniel)会被忽略掉,除非加前缀data-或aria-(如data-daniel or aria-daniel)。

那我们从源码来瞧瞧是不是这样。(注意:自定义组件类型的属性是不受上面规则的约束的,因为源码里面压根没处理嘛,哈)

DOMProperty.jsinjectDOMPropertyConfig代码中只是对domPropertyConfig.Properties进行遍历,domPropertyConfig.Properties定义了一些标准属性,所以非标准属性都会被忽略掉

var Properties = domPropertyConfig.Properties || {};
...

for (var propName in Properties) {
    ....
}

HTMLDOMPropertyConfig.js的源码中,可以看出前缀为data-aria-的属性即被判断为自定义属性。

isCustomAttribute: RegExp.prototype.test.bind(
  new RegExp('^(data|aria)-[' + DOMProperty.ATTRIBUTE_NAME_CHAR + ']*$')
),

--EOF--

相关文章

  • JSX那些不一致的标准属性[一源一世界][之React]

    通过阅读React的关于JSX的官方文档,我们知道在JSX声明标准HTML元素(如div)的属性时,有一些比较特殊...

  • 《深入React技术栈》笔记

    一、初入React世界 1.2 JSX语法 class 属性修改为className for 属性修改为 htmF...

  • React 中的事件处理(2)

    事件处理 React 元素采用类似 DOM0 标准中的事件属性定义方法 JSX 点击 直接创建 React 元素方...

  • React

    React的Hello World 也可以使用JSX语法实现 JSX特定属性 使用引号,来将属性值指定为字符串字面...

  • JSX本质

    JSX是React引入的,但不是React独有的 React已经将它作为一个独立标准开放,其他项目也可用 Reac...

  • (二)react入门

    react使用的是JSX语法,和vue、小程序语法类似 class属性在react中要写成className 创建...

  • 005@关于JSX语法.md

    005@关于JSX语法 转(有所更改):React入门:关于JSX语法可以参考的资料:React.js学习笔记之J...

  • React/JSX 编码规范

    React/JSX 编码规范 福利时间 作者React Native开源项目OneM地址(按照企业开发标准搭建框架...

  • React.js(二)

    React JSX### React 使用 JSX 来替代常规的 JavaScript。JSX 是一个看起来很像 ...

  • ReactJS基础学习-01

    React JSX语法 React 使用 JSX 来替代常规的 JavaScript。 JSX 是一个看起来很像 ...

网友评论

    本文标题:JSX那些不一致的标准属性[一源一世界][之React]

    本文链接:https://www.haomeiwen.com/subject/eghjjttx.html