React是什么?
React
是一个声明式,高效且灵活的用于构建用户界面的 JavaScript
库。使用 React
可以将一些简短、独立的代码片段组合成复杂的 UI
界面,这些代码片段被称作“组件”。React
中拥有多种不同类型的组件。
1 | class Square extends React.Component { |
render
方法的返回值描述了你希望在屏幕上看到的内容。render
返回了一个 React
元素,这是一种对渲染内容的轻量级描述。一个组件接收一些参数,我们把这些参数叫做 props
,然后通过 render
方法返回需要展示在屏幕上的视图的层次结构。如上面的代码中 Square
组件只会渲染一些内置的 DOM
组件,如<div />
、<li />
等,但是你也可以组合和渲染自定义的 React
组件。
第一个Reactdemo
我们要实现一个列表,列表有Name
和Job
两列,我们能进行delete
操作和submit
操作。
安装环境要求以及运行
环境至少要求:Node.js5.2
版本以上
安装React
1 | npm install -g create-react-app |
创建一个对应的目录存放文件,利用cmd
命令行cd
到对应的目录,执行以下命令:
1 | npx create-react-app react-tutorial |
运行完之后将localhost:3000
使用新的React应用程序弹出一个新窗口如下:
这个时候你去对应的react-tutorial
文件夹下就能看到对应的文件了,这个时候你就可以打开/src
目录,对里面的文件进行操作了,在你打开对应的localhost:3000
的时候,在对应的编辑器里面进行操作保存的话对应的网站内容就会即时的进行更新,报错的信息也能很快地看到。
第一次修改尝试
我们将里面的对应的App.js
文件进行修改
1 | import React, { Component } from 'react' |
运行之后的效果图
我们将组件导出为App
并加载index.js
。将组件分离到文件中并不是强制性的,但如果不这样做,应用程序将开始变得笨拙和失控,就是对应的功能做到对应的文件里面,维护一个较好的功能树。
创建Table组件,实现放置列表
首先创建一个Table.js
文件。创建一个组件的方式有两种,一个是类组件,用类组件创建这个Table
组件:
1 | import React, { Component } from 'react' |
我们创建的这个组件是一个自定义类组件。我们将自定义组件大写,以区别于常规HTML元素。返回App.js
,我们可以在表中加载,首先导入它:
1 | import Table from './Table' |
加载了之后我们才能在App.js
文件中使用这个组件,不然是会报错的。那么加载了之后修改对应的render()
函数内容
1 | return ( |
效果图如下:
另一种创建组件的方式是使用ES6
箭头函数来创建这些简单的组件。它是一个函数。此组件不使用class
关键字。我们修改一下刚才创建Table
组件的方式:
1 | const TableHeader = () => { |
刷新一下结果还是和之前的一样。
利用props和state进行数据的传输
我们现在已经有了一个Table
组件,但是数据是硬编码的,React
的一个很好的点就是数据传输非常的方便,它使用props
和state
来实现。我们先使用props
来进行数据传输。
props
首先删除TableBody
组件中的所有数据
1 | const TableBody = () => { |
然后我们在它的父组件里面加入数据,并进行数据传输,我们进行数据传输的方式就是使用属性的方式传递给子组件:
1 | class App extends Component { |
传递到了Table
组件之后,我们需要把数据从这个组件内拿出来:
1 | //拿出来的方式通过数组映射返回数组每个对象,将其映射在rows变量中并返回 |
这样的话数据传输就做完了,但是props
呢,它只能进行读取并不能对于组件的信息进行改动,如果需要改动的话就需要state
了,也就是实现我们的delete
操作。
state
首先需要在父组件里面创建一个state
对象。存放我们之前的数据,为了更新状态,我们将使用this.setState()
一种内置的方法来操作状态
1 | state = { |
我们需要通过一个函数来处理这件事情,filter
就是之前在学习JavaScript
的一个高阶函数
1 | removeCharacter = (index) => { |
同时呢我们也需要把这个函数传给下面对应的组件,在App.js
中进行更新:
1 | return ( |
在Table
组件中也需要进行相应的更新操作:首先要提取出正确的数据,然后继续传递给下面的组件TableBody
1 | render() { |
在TableBody
中就需要添加对应的组件并对点击时间进行removeCharacter()
方法的处理:
1 | <tr key={index}> |
该onClick
函数必须通过一个返回该removeCharacter()
方法的函数就实现了我们的需求。对应的效果图如下并且删除了一个Mac
至此初始化和删除操作就搞定了。
表单的提交
通过表单的提交我们可以添加对应的数据,首先我们删除之前的数据,使它为空,然后我们创建一个From.js
的文件,设置初始状态为Form
具有一些空属性的对象,并将该初始状态指定给this.state
。
1 | import React, { Component } from 'react' |
我们对此表单的想法是每次在表单中更改字段的状态,并且当我们提交时,所有数据将传递到App
状态,然后将更新状态Table
。
首先我们定义一个函数handleChange
,在Input
中添加Onchange
属性调用改函数,使得它能获得Input
组件输入的数据。
1 | handleChange = (event) => { |
这个时候,这个表单已经能够成功的提交了。但是还不能渲染到父组件,我们需要做的最后一步就是在App.js
文件创建一个名为handleSubmit()
的函数,传递到From.js
组件,然后在该组件中调用这个函数,使得我们在App.js
中能够成功的实际提交该数据并更新父状态。
App.js
1 | //我们实际提交该数据并更新父状态 |
From.js
1 | onFormSubmit = (event) => { |
差不多这样整个demo
就跑通了。
流程是这样的,可能叙述的不是很清楚,大家可以去github
上看下源码就能理解了,还是很基础的demo
。
https://github.com/xiaorui2/FrontLearn/tree/master/react-tutorial/src