1、回顾

module.exports = {

entry: {},

output: {},

plugins: [],

module: {},

resolve: {},

devServe: {}

}

2、react

2.1 复制相关文件

index.html / .babelrc / package.json / webpack.config.js

删除vue相关文件

2.2 创建day02/src,修改webpack的入口文件以及@符号的目录

entry: { // object 类型写法 ---- 推荐写法
app: './day02/src/index.js' // 会将本项目打包成为一个js文件 app.js
},
resolve: {
extensions: ['.js', '.jsx'], // 代表缺省的后缀名,引入时可以省略的后缀名 --- import axios from './request'; 而不用 import axios from './request.js';
alias: { // 别名
'@': path.join(__dirname, './day02', 'src') // src 的别名为 @
}
}

3、react组件

js的语法加react的{}

src/index.js 入口文件

import React from 'react'; // 必不可少
import ReactDOM from 'react-dom'; // 将组件渲染至DOM节点 import App from './App'; // 导入组件 ---- 后缀名可以省略,配置过缺省的后缀名 // 将App 组件渲染至真实的DOM节点
// 组件使用就是标签形式,可以是双闭合标签,也可以是单闭合标签
// 组件的首字母必须大写
// 小写为HTML标签
ReactDOM.render(
<App />,
document.getElementById('app')
)

3.1 类组件 ---- es6中的class

import React from 'react'; // 组件必须导入

// 使用es6的class实现react的组件,组件的首字母大写
// 要实现组件,必须继承React的Component
// 必须调用super()方法 ---- 类的构造方法中调用 ----- 如果组件中使用this
// 子类必须在constructor方法中调用super方法,否则新建实例时会报错
// 这是因为子类自己的this对象,必须先通过父类的构造函数完成塑造,得到与父类同样的实例属性和方法,然后再对其进行加工,加上子类自己的实例属性和方法。如果不调用super方法,子类就得不到this对象。
class Com extends React.Component {
constructor (props) { // 父类可以调用的所有的属性和方法都在props值中
super(props)
} // render 函数 继承自父类,是react生命周期的一部分
// 返回一段HTML代码,表示当前组件的结构(相当于vue中的template),HTML代码一般使用()包裹
// 返回的HTML结构的代码的语法 ---- jsx语法 --- javascript xml - 类xml语言
// 只有一个顶级标签
render () {
return (
<div>
hello world
</div>
)
}
} // 暴露组件
export default Com;

3.2 函数式组件 ---- es6中的箭头函数

import React from 'react'; // 组件必须导入

// 箭头函数返回一段HTML代码
// const Com = () => {
// 业务逻辑
// return (
// <div>
// hello react函数式组件
// </div>
// )
// } // 箭头函数的自带返回值,返回()表示直接返回HTML代码
const Com = () => (
<div>
hello react函数式组件-简写
</div>
) // 暴露组件
export default Com;

3.3 什么时候使用类组件,什么时候使用函数式组件

所有的组件都可以使用类组件,含有状态(组件初始化数据)的组件必须使用类组件(暂时)

函数式组件又被称之为UI组件以及无状态组件

状态 ----- 初始化数据 ---- 类似vue中的data

4 react的状态 ---- state

4.1 设定初始化的数据

import React from 'react'; // 组件必须导入

class Com extends React.Component {
// 状态放置的位置在构造方法内
// 子类自己的this对象,必须先通过父类的构造函数完成塑造,得到与父类同样的实例属性和方法,然后再对其进行加工,加上子类自己的实例属性和方法
constructor (props) { // props父类同样的实例属性和方法
super(props);
this.state = { // react初始化数据 ---- 类似于vue中的data
msg: 'hello react + state'
}
} render () {
return (
<div>
{ this.state.msg }
</div>
)
}
}
// 暴露组件
export default Com;

4.2 jsx注释 ---- render -> return ()

return (
<div>
{
// 111 -- 单行注释
}
{
/*
222222 --- 多行注释
*/
}
</div>
)

4.3 数据的遍历 ---- 边遍历边渲染

js的遍历,加{}变react的遍历,遍历选项返回jsx语法的结构

  • 单层遍历
import React, { Component } from 'react'; // 解构赋值

class Com extends Component {
constructor (props) {
super(props);
this.state = {
msg: 'hello world',
list: ['aa', 'bb', 'cc', 'dd'] // ++++++++++++++
}
} render () {
return (
<div>
{ this.state.msg }
{
// +++++++++++++++++++++++++++++++++++++++++++++++++
this.state.list.map((item, index) => {
return (
<p key={ index }>
{ item }
</p>
)
})
}
</div>
)
}
} export default Com;
  • 多层遍历 ------ 返回的html代码必须符合jsx语法
import React, { Component } from 'react'; // 解构赋值

class Com extends Component {
constructor (props) {
super(props);
this.state = {
msg: 'hello world',
// ++++++++++++++++++++++++
list: [
{
brand: 'iphone',
arr: ['iphone6', 'iphone7', 'iphone8', 'iphonex', 'iphone11']
},
{
brand: 'huawei',
arr: ['p20', 'p30', 'meta20', 'meta30']
}
]
}
} render () {
return (
<div>
{ this.state.msg }
{
// +++++++++++++++++++
this.state.list.map((item, index) => {
return (
<div key={ index }>
<h1>{ item.brand }</h1>
{
// ***********************
item.arr.map((itm, idx) => {
return (
<p key = { idx }>{ itm }</p>
)
})
}
</div>
)
})
}
</div>
)
}
} export default Com;
  • 拓展 - 16版本以前
var Com = React.createClass({
initialState () {
return {
msg: ''
}
}
render () {
return ()
}
})

4.4 数据的遍历 ---- 先遍历后渲染

import React, { Component } from 'react'; // 解构赋值

class Com extends Component {
constructor (props) {
super(props);
this.state = {
msg: 'hello world',
list: ['aa', 'bb', 'cc', 'dd'],
list1: [<p key="1">aaa</p>, <p key="2">bbb</p>]
}
} render () {
// ++++++++++++++++++
let arr = [];
this.state.list.map((item, index) => {
arr.push(
<p key={ index }> { item } </p>
)
})
// +++++++++++++++++++
return (
<div>
{ this.state.msg }
{
this.state.list
}
{ this.state.list1 }
{
// ++++++++++++++++++
arr
}
</div>
)
}
} export default Com;

4.5 条件判断

  • 最普通的条件判断 ---- 完全是js的语法
import React, { Component } from 'react'; // 解构赋值

class Com extends Component {
constructor (props) {
super(props);
this.state = {
flag: true
}
} render () {
if (this.state.flag) {
return (
<div>
如果条件为真我就显示
</div>
)
} else {
return (
<div>
如果条件为假我就显示
</div>
)
}
}
} export default Com;
  • 三目运算符 -----
import React, { Component } from 'react'; // 解构赋值

class Com extends Component {
constructor (props) {
super(props);
this.state = {
flag: false
}
} render () {
return (
<div>
{
// +++++++++++++++++++++++++++++++++
this.state.flag ? <p>真</p> : <p>假</p>
}
</div>
)
}
} export default Com;

5、注意事项

  • 组件必须导入React

  • 添加状态必须在构造方法,添加构造方法必须执行super()

  • 不要在jsx语法中使用 if - else,可以使用三目运算、或运算、与运算

  • 不要在jsx语法中使用 for 循环, 使用 map 循环

6、预习

  • 自定义函数

  • 生命周期钩子函数

  • 修改状态

  • 组件

  • 组件传值

react中类组件、函数组件、state、单层遍历、多层遍历、先遍历后渲染、if-else、三目运算符的更多相关文章

  1. react高阶函数组件

    Layout as a Higher Order Component // components/MyLayout.js import Header from './Header'; const la ...

  2. React - 组件:函数组件

    目录: . 组件名字首字母一定是大写的 . 返回一个jsx . jsx依赖React,所以组件内部需要引入React . 组件传参 a. 传递. <Component list={ arrDat ...

  3. 好客租房21-react组件的两种创建方式(函数组件)

    1使用函数创建组件 函数组件:使用js的函数或者箭头函数创建的组件 约定1:函数组件名称必须以 开头 约定2:函数组件必须有返回值 表示该组件的结构 如果返回值为null 表示不渲染任何内容 2.1使 ...

  4. 前端笔记之React(二)组件内部State&React实战&表单元素的受控

    一.组件内部的State 1.1 state state叫状态,是每一个类式组件都有的属性,但函数式组件,没有state. state是一个对象,什么值都可以定义. 在任何类式组件的构造函数中,可以用 ...

  5. 【React】学习笔记(一)——React入门、面向组件编程、函数柯里化

    课程原视频:https://www.bilibili.com/video/BV1wy4y1D7JT?p=2&spm_id_from=pageDriver 目录 一.React 概述 1.1.R ...

  6. [转] 深入理解React 组件状态(State)

    React 的核心思想是组件化的思想,应用由组件搭建而成,而组件中最重要的概念是State(状态),State是一个组件的UI数据模型,是组件渲染时的数据依据. 一. 如何定义State 定义一个合适 ...

  7. React中类定义组件constructor 和super

    刚开始学习React没多久,在老师的教程里看到了类组件的使用示例,但是和资料上有些冲突,而引发了一些疑问: 类组件中到底要不要定义构造函数constructor()? super()里边到底要不要传入 ...

  8. 深入理解React 组件状态(State)

    React 的核心思想是组件化的思想,应用由组件搭建而成,而组件中最重要的概念是State(状态),State是一个组件的UI数据模型,是组件渲染时的数据依据. 一. 如何定义State 定义一个合适 ...

  9. 《React后台管理系统实战 :一》:目录结构、引入antd、引入路由、写login页面、使用antd的form登录组件、form前台验证、高阶函数/组件

    实战 上接,笔记:https://blog.csdn.net/u010132177/article/details/104150177 https://gitee.com/pasaulis/react ...

  10. React 函数组件中对window添加事件监听resize导致回调不能获得Hooks最新状态的问题解决思路

    React 函数组件中对window添加事件监听resize导致回调不能获得Hooks最新状态的问题解决思路 这几天在忙着把自己做的项目中的类组件转化为功能相同的函数组件,首先先贴一份该组件类组件的关 ...

随机推荐

  1. once函数

    function once(fn){ let down = false; return function(){ if(!down){ down = true; return fn.apply(this ...

  2. docker安装常用软件

    linux安装docker 1.安装gcc相关 yum install gcc -y yum install gcc-c++ -y 2.安装工具包 #安装工具包 yum -y install yum- ...

  3. centeros忘记root登录密码

    转载自:https://www.cnblogs.com/dongml/p/10333819.html 很多时候我们都会忘记Linux root 用户的口令,下面就教大家如果忘记root口令怎么办 第1 ...

  4. js-var,let ,const 的区别

    变量提升: 在js预编译阶段,函数和变量的声明会被提前检索编译,打乱了编写时的声明顺序. 函数字面量表达式不会被提升 var a = function(){}; ex: console.log(a) ...

  5. 导入ssm项目时,项目基本的配置文件

    一.ssm框架基本的配置文件 上面的这些配置文件对于比较简单的ssm项目其实大同小异,逻辑上是差不多的. 在config目录下 在lib下就是各种jar包 二.导入ssm项目后,本地环境配置和项目本身 ...

  6. C++常见报错信息和原因的对应关系

    1. 无法找到 xxx.dll 没有把动态链接库和exe放在一个文件夹下 2. 不允许使用不完整的类型 指的是忘了加头文件 3. link err .无法解析的外部符号 指的是 lib 库没有配置对 ...

  7. C#获取本地所有打印机名称

    引用:using System.Drawing.Printing; 实现代码: List<string> PrintS = new List<string>(); foreac ...

  8. Flink学习系列——简介

    Flink起源 德国柏林 Flink的目标 低延迟 高吞吐 较高的准确性(乱序数据的处理) 良好的容错性(容错性差的表现:一个节点挂了,全部回滚重新做计算,这对实时性要求高的场景非常致命)

  9. PHP 二维按照某个字段对数组排序

    function arraySort($arr, $keys, $type = 'asc') {//二维按照某个字段对数组排序 $keysvalue = $new_array = array(); f ...

  10. beast加密

    Beast:  https://github.com/liexusong/php-beast?tdsourcetag=s_pctim_aiomsgbeast-安裝到/root------------- ...