react学习笔记(1) - 初识React(jsx语法)
初识React
- 官方文档
React
起源于Facebook
的内部项目,因为该公司对市场上所有JavaScript MVC
框架,都不满意,就决定自己写一套,用来架设Instagram
的网站。做出来以后,发现这套东西很好用,就在2013年5月开源了。React
不是一个完整的MVC
框架,最多可以认为是MVC
中的V(View)
,甚至React
并不非常认可MVC
开发模式;React
构建页面UI
的库。可以简单地理解为,React
将界面分成了各个独立的小块
,每一个块就是组件
,这些组件之间可以组合、嵌套,就成了我们的页面。
react
的特性
虚拟DOM
创建第一个React
项目
- 全局安装
create-react-app
npm install -g create-react-app |
- 创建一个
React
项目
create-react-app myapp |
- 项目生成后,默认目录结构包含:
public
和src
两个文件夹 ,其中public
里的index.html
是整个项目的首页,最终所有的组件内容会挂载到这个页面中;src
下面就是我们编写组件的地方,默认里面有index.js
文件,是一个入口文件- 项目创建成功会出现以下画面:
Success! Created your-app at /dir/your-app |
- 根据上面的提示,通过
cd myapp
命令进入目录并运行npm start
即可运行项目。
生成项目的目录结构如下:
├── README.md 使用方法的文档 |
编写第一个react
应用程序
react
开发需要引入多个依赖文件:react.js
、react-dom.js
,分别又有开发版本和生产版本,create- react-app
里已经帮我们把这些东西都安装好了。把通过CRA
创建的工程目录下的src
目录清空,然后在 里面重新创建一个index.js
(整个项目的入口文件). 写入以下代码:
/* --------------- react项目入口文件 ---------------- */ |
结果展示
JSX
语法
JSX
将HTML
语法直接加入到JavaScript
代码中,再通过翻译器
转换到纯JavaScript
后由浏览器执行。在实际开发中,JSX
在产品打包阶段都已经编译成纯JavaScript
,不会带来任何副作用,反而会让代码更加直观并易于维护。 编译过程由Babel
的JSX
编译器实现。JSX
的原理是用js对象
来描述一个DOM
元素结构jsx
全称:JavaScript XML
,它是react
定义的一种类似于XML
的JS
扩展语法: JS + XML本质是:
React.createElement(component, props, ...children)//语法糖 |
它的作用是用来简化
创建虚拟DOM
,其实所谓的JSX
其实就是JavaScript
对象,所以使用React
和JSX
的时候一定要经过编译的过程:JSX
—使用react
构造组件,bable
进行编译—>JavaScript
对象 —ReactDOM.render()
—>DOM
元素 —>插入页面
JSX
语法规则:
定义
虚拟DOM
的使用,不要使用引号””// 定义虚拟dom不能使用""
const root = ReactDOM.createRoot(document.getElementById('root'));
// 里面的html结构直接写即可,不能使用引号包裹
root.render(<h1 id='title'>欢迎进入React的世界</h1>);// render方法就是渲染的意思,需要我们自己手动的写dom结构标签中混入
js
代码的时候需要使用{}定义样式类名时,不能使用
class
,要使用className
,因为class
是ES6
中的类定义关键字<!-- 我在id属性中使用了js语句,需要使用{}包裹js语句,以及不能使用class来定义标签类名,需要使用className -->
<h2 className="title" id={myId.toLowerCase()}>内联样式,要使用
style={{key:value}}
的形式去写(第一层表示你填写js代码,里层表示你填的js对象
)<!-- style内联样式中第一层{}表示里面填写js代码,第二层{}里面表示以js对象的形式填写的css样式 -->
<span style={{color:'white',fontSize:'29px'}}>{myData.toLowerCase()}</span>虚拟Dom只能存在一个根标签
标签必须闭合
<!-- jsx中只能存在一个跟标签,与Vue2中的template类似 -->
<div>
<h2 className="title" id={myId.toLowerCase()}>
<span style={{color:'white',fontSize:'29px'}}>{myData.toLowerCase()}</span>
</h2>
<!-- 标签必须闭合(双标签闭合或者自闭合) -->
<input type="text"/>
</div>标签首字母
- 若小写字母开头,则将该标签转为
html
中同名元素,若html
中无该标签对应的同名元素,则报错。 - 若大写字母开头,
react
就去渲染对应的组件,若组件没有定义,则报错。
<!-- 字母小写表示html中的同名元素,不存在则报警告(页面同样会渲染里面的内容) -->
<good>你好!</good>
<!-- 字母大写则表示对应的组件,没有定义则会报错 -->
<Good>你好!</Good>- 若小写字母开头,则将该标签转为
小练习:
|
结果展示:
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0许可协议。转载请注明来自 肥林の仓库