皮皮网
皮皮网

【燃鹅代跑源码】【幸运28竞猜 源码】【源码上传到哪】attrib属性源码_attributes属性

时间:2024-12-24 03:18:13 来源:同城约会交友源码

1.在React中为什么要用JSX?
2.OpenGL 着色器详解

attrib属性源码_attributes属性

在React中为什么要用JSX?

       èµ·å› 

       å¤§å®¶å¥½ï¼Œæˆ‘是爱吃鱼的桶哥Z。相信使用React开发的童鞋,在编写组件的过程中接触最多的就是JSX。那么为什么React要用JSX来编写组件呢?JSX的本质是什么?是不是只有React才能用JSX?针对这几个问题,今天我们就一起来学习一下吧。

JSX

       JSX在官网的解释是:它是一种JavaScript语法的扩展,并且它具有JavaScript的所有特性。如果有人问你为什么React中要使用JSX,其实本质是问你为什么不用其它的方案来实现,为什么偏偏是JSX?

       é¦–先,我们在前面也了解到JSX本质是JavaScript的语法扩展;其次,在React的开发中,React并不是强制要求一定要使用JSX,我们完全可以通过React.createElement来创建React组件,类似下面这样:

render(){ returnReact.createElement("div",属性属性null,"Hello",this.props.name);}

       è€Œæˆ‘们通过JSX编写的组件,相对React.createElement来说就要简洁明了许多,同样的组件,编写起来会更为简洁,并且代码的层次也会更加的清晰,类似下面这样:

render(){ return<div>Hello{ this.props.name}</div>;}

       å½“我们使用JSX将组件编写完成后,React内部需要将组件转化为DOM树,看起来就像XML一样。而XML在树结构的描述上天生就具有可读性强的优势。

       è™½ç„¶æˆ‘们是通过JSX来编写组件,但是最终React还是会通过babel将JSX编译为js可执行的代码。我们之所以不直接用React.createElement来创建组件,在前面也已经说明了原因,这里就不做赘述了。

       å› ä¸ºæˆ‘们知道最终的代码会通过babel编译成js可直接执行的代码,因此JSX不仅能在React中进行使用,同样在Vue中也可以使用JSX来编写组件。并且使用JSX编写的组件也可以用于跨端应用的渲染,例如React-Native中使用的组件结构跟React结构是一样的。

扩展

       åœ¨ä¸Šé¢æˆ‘们介绍了JSX最终会通过babel编译为js可执行的代码,那么Babel是如何实现JSX到js的编译呢?我们可以通过查看相关的源码来了解一下,源码如下:

module.exports=function(babel){ vart=babel.types;return{ name:"custom-jsx-plugin",visitor:{ JSXElement(path){ varopeningElement=path.node.openingElement;vartagName=openingElement.name.name;varargs=[];args.push(t.stringLiteral(tagName));varattribs=t.nullLiteral();args.push(attribs);varreactIdentfier=t.identifier("React");varcreateElementIdentifier=t.identifier("createElement");varcallee=t.memberExpression(reactIdentfier,createElementIdentifier);varcallExpression=t.callExpresion(callee,args);callExpression.arguments=callExpression.arguments.concat(path.node.children);path.replaceWith(callExpression,path.node);},},};}最后

       æˆ‘们通过学习了解到React中选用JSX的原因,以及JSX的本质是什么,也了解到babel是如何将JSX编译为js可执行的代码。如果你对babel的编译有兴趣,可以到babel官方网站进行查看和学习。

OpenGL 着色器详解

       GLSL语言

       GLSL(OpenGL Shading Language)专用于编写着色器,通过定义main函数的源码程序片段,指导渲染引擎渲染内容。属性属性

       GLSL语法类似C语言,源码增加特定关键字修饰变量。属性属性燃鹅代跑源码基本结构如下:声明GLSL版本、源码幸运28竞猜 源码模式、属性属性变量,源码主函数main处理输入输出。属性属性

       输入变量in

       GLSL允许有限输入变量,源码硬件决定数量,属性属性可通过GL_MAX_VERTEX_ATTRIBS查询上限。源码

       输出变量out

       片段着色器直接输出色值,属性属性源码上传到哪无需与后续阶段关联。源码可通过一致数据类型和名称建立顶点着色器到片段着色器间联系。属性属性

       全局变量

       全局变量作用于整个着色器程序,可在多个着色器间共享,qgc源码官网通过GL编码获取。

       示例:片段着色器中使用全局变量。

       顶点着色器与片段着色器

       顶点着色器声明位置与颜色变量,片段着色器声明一致输入变量接收颜色,qml控件库源码实现数据传递。

       数据类型

       向量类型定义、重组用于复杂数据结构。

       glVertexAttribPointer

       设置顶点变量属性,定义步长、偏移与位置,用于配置顶点数据。

       顶点数据、着色器配置

       顶点着色器声明输入变量,片段着色器接收传递颜色,完成数据流。

       着色器程序

       着色器程序作为最小绘制单元,由两个着色器决定结果。面向对象封装着色器程序。

       加载着色器代码梳理

       流程包括:创建着色器对象、附加源码编译、创建程序、绑定与链接。

       着色器程序类封装

更多内容请点击【时尚】专栏