IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 初识、构建 React 及事件(一) -> 正文阅读

[JavaScript知识库]初识、构建 React 及事件(一)

一、React 是什么?

????????1. React 是一个声明式,高效且灵活的用于构建用户界面的 JavaScript库

????????2. 使用 React 可以将一些简短、独立的代码片段组合成复杂的UI界面,这些代码片段被称为”组件”

????????3. React 是用于渲染 UI 的 JS 库,定位在与实现 UI

????????4. React Web App 解决方案,衍生的 React Native 是跨屏 App 解决方案

二、React 的特点?

  1. 声明式设计 : React 采用声明范式,可以轻松描述应用。

  2. 高效 : React通过对 DOM 的模拟,最大限度地减少与 DOM 的交互。

  3. 灵活 : React 可以与已知的库或框架很好地配合。

  4. JSX :一种独立的语言,试图解决很多JS的缺陷,ES6包含了几乎所有JSX的特性

  5. 组件 : 通过React 构建组件,使得代码更加容易得到复用,能够很好的应用在大项目的开发中,代码复用

  6. 单向响应式的数据流 : React 实现了单向相应的数据流,从而减少了重复代码,这也是它为什么比传统数据绑定更简单。

三、React 的优缺点?

????????优点 :

传统方法频繁操作DOM,性能无法达到要求;React使用VDOM,性能高
传统JS代码维护成本高,React基于组件开发
需要支持移动端开发

????????缺点:

对于一直使用JS,jQuery的传统前端,React非常不友好
React强调组件和状态管理,其世界观是面向程序语言的
Vue.js强调视图的自动同步,其世界观是面向UI脚本的
React的学习成本较Vue.js高。
React没有全家桶,只做UI

四、引入 React 库

????????1. React.js框架本身包含两个部分:

????????react.js : 提供了React.js核心功能代码,如:虚拟dom、组件
????????React-dom.js : 提供了与浏览器交互的DOM功能,如:dom渲染

????????2. 在 script 中引入 React 框架有两种方式:

????????第一种 : 使用网址引入

<script src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>

????????第二种 : 使用文件夹中的文件引入

我将这个文件夹放在 百度网盘上,需要的兄弟萌可以自行去下载
链接:https://pan.baidu.com/s/1LP36Cjhm05z9WVH6nioH9A
提取码:1234

五、React 简单案例

????????1. 我们正常创建一个 html 文件,然后引入 React.js 和 React-dom.js,然后进行编写代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./js/react.development.js"></script>
    <script src="./js/react-dom.development.js"></script>
</head>
<body>
    <div id="box"></div>

    <script>
        ReactDOM.render(
            '第一次使用 react 框架',
            document.querySelector('#box'),
            ()=>{
                console.log('使用成功')
            }
        )
    </script>
</body>
</html>

????????2. 打开浏览器,会发现 id 为 box 的 标签,里面成功插入了我们指定的内容,并且在控制台打印 “使用成功”
在这里插入图片描述

六、JSX 是什么?

????????JSX 是一个基于 JavaScript + XML 的一个扩展语法

它可以作为值使用
它并不是字符串
它也不是HTML
它可以配合JavaScript 表达式一起使用

????????函数中不能解析标签,可以执行两步操作使用 JSX,让它解析,不然会报错

一. 在头部引入 babel.min.js (在上面的百度网盘中我也放入了这个文件)
二. 在 script 中写入 type 类型, 定义为 text/babel 就可以解析了

????????3. 代码实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./js/react.development.js"></script>
    <script src="./js/react-dom.development.js"></script>
    <script src="./js/babel.min.js"></script>
</head>
<body>
    <div id="box"></div>

    <script type="text/babel">

        /*
            JSX : 基于 javascript 和 xml 的扩展语法

            函数中不能解析标签,可以执行两步操作,让它解析
                一. 在头部引入 babel.min.js
                二. 在 script 中写入 type 类型, 定义为 text/babel 就可以解析了
        */

        ReactDOM.render(
            <header>
                <h1>hello react</h1>
                <p>利用JSX来渲染</p>
            </header>,
            document.querySelector('#box'),
            ()=>{
                console.log('使用成功')
            }
        )
    </script>
</body>
</html>

七、插值表达式 {}

????????1. 在 react 中,不会像 vue 那样在 data 中 定义我们的值,而是随便一个 定义一个变量值我们就可以使用.当然,使用的时候,也是像 vue 那样使用 花括符{},vue 使用的 两个花括符{{}},但是要注意的是,在 react 中插值表达式只使用一个花括符{},代码及注意点如下 :

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./js/react.development.js"></script>
    <script src="./js/react-dom.development.js"></script>
    <script src="./js/babel.min.js"></script>
</head>
<body>
    <div id="box"></div>

    <script type="text/babel">

        // let data = "今天天气很好~"; // 原样输出
        // let data = 1; // 原样输出
        // let data = false; // 不输出
        // let data = undefined; // 不输出
        // let data = null; // 不输出
        // let data = ['内容1','内容2','内容3']; // 输出 数组里面的内容,但是去掉了 ","
        let data =  {
            name:'张三',
            sex:'女',
            age:19
        }
        // 直接 data ,不会输出任何内容,并且会报错,但是 .属性,就可以输出内容

        // 注意 :
        // 在 react 中插值表达式使用 {}
        // 在 vue 中插值表达式使用 {{}}

        ReactDOM.render(
            <header>
                <h1>{data.name}</h1>
                <h1>{data.sex}</h1>
                <h1>{data.age}</h1>
            </header>,
            document.querySelector('#box'),
            ()=>{
                console.log('使用成功')
            }
        )
    </script>
</body>
</html>

????????2. 我们在浏览器中查看
在这里插入图片描述

八、条件输出

????????1. 条件输出,我们有些时候用来做一些判断,让某些值显示,代码如下 :

<script type="text/babel">

        // ? :  三元表达式 相当于  if else
        // ||   或 逻辑  相当于 if(!)  取反
        // &&   与 逻辑  相当于 if()  

        ReactDOM.render(
            <header>
                <h1>{false ? '成立' : '不成立'}</h1>
                <p>{true || '利用JSX来渲染'}</p>
                <div>{true && "正确"}</div>
            </header>,
            document.querySelector('#box'),
            ()=>{
                console.log('使用成功')
            }
        )
    </script>

????????2. 我们来看浏览器
在这里插入图片描述

九、列表循环

????????1. 在 react 中 列表循环 和 vue 中的写法大然不同,不像 vue,使用 v-for 就可以了,在 react 中将定义好的数据进行 forEach 或者 map 列表循环. 代码及注意点如下 :

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./js/react.development.js"></script>
    <script src="./js/react-dom.development.js"></script>
    <script src="./js/babel.min.js"></script>
</head>
<body>
    <div id="box"></div>

    <script type="text/babel">

        let data = [
            '内容1',
            '内容2',
            '内容3',
            '内容4'
        ]

        // 在普通函数中 定义渲染  (使用 forEach 方法)

        // function toData(){
        //     let arr = [];

        //     data.forEach((item)=>{
        //         arr.push(<li>{item}</li>)
        //     })

        //     return arr;
        // }

        // ReactDOM.render(
        //     <header>
        //         {toData()}
        //     </header>,
        //     document.querySelector('#box'),
        //     ()=>{
        //         console.log('使用成功')
        //     }
        // )

        // 在 react 虚拟dom 函数中 定义渲染  (使用 map 方法),不然会报错
        ReactDOM.render(
            <header>
                {
                    data.map(item=>{
                        return <li>{item}</li>
                    })
                }
            </header>,
            document.querySelector('#box'),
            ()=>{
                console.log('使用成功')
            }
        )
    </script>
</body>
</html>

????????2. 打开浏览器查看
在这里插入图片描述

十、自动化构建 React

????????使用上面的那种引入框架的方式不能体现到 react 框架组件的复用性,这个时候我们就要构建 React 了

????????安装 :

npm 安装 : npm i -g create-react-app
yarn 安装 : yarn global add create-react-app

????????创建项目:

create-react-app 项目名称

????????运行项目:

使用 npm start

????????注意:

你们在运行项目的时候,我不知道会不会报错,反正我是报错了,处理的方法如下 :
在 src 文件夹下创建一个 .env 同级文件,在里面放入以下代码,在执行 npm start 就可以成功运行了
SKIP_PREFLIGHT_CHECK=true

????????项目目录

react 的项目目录 和 vue 创建的项目目录 都差不多,这里就不再介绍了

十一、使用 React 创建类组件

import React,{Component} from 'react';
// 引入的 组件
import FriendList from './FriendList';

/*
    类组件:
        1. 组件类名必须继承 **React.Component**
        2. 组件类必须有 **render** 方法
        3. render 方法的 return 后 定义组件的内容
    
    ps: 记得导出
*/

class App extends Component{

    render(){
        return (
            <div>
                <FriendList></FriendList>  
            </div>
        )
    }
}

export default App;

十二、props 和 stata

props : 父组件传递过来的参数

state : 组件自身状态
setState 在 state 定义的数据要想改变,直接操作是不行的,需要 this.setState({}) 方法,才可以改变
多个 setState 合并

props 与 state 的区别 :

state 的主要作用是用于组件保存、控制、修改 自己 的可变状态,在组件内部进行初始化,也可以在组件内部进行修改,但是组件外部不能修改组件的 state

props 的主要作用是让使用该组件的父组件可以传入参数来配置该组件,它是外部传进来的配置参数,组件内部无法控制也无法修改

state 和 props 都可以决定组件的外观和显示状态。通常,props 做为不变数据或者初始化数据传递给组件,可变状态使用 state

十三、总结

????????今天一整天的 react 学习收获满满,虽然 vue 和 react 都是目前市场十分火热前端框架,但是有些公司却会根据情况使用不同的框架.如果你想有进步,有提升空间,这些都是我们前端人员必须要掌握的.vue 常用于 中小型项目,而 react 常用于 中大型项目. 也认识到了 react 与 vue 相比之下比较神奇的地方,明天我会继续分享我的学习内容.

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-27 16:07:20  更:2021-07-27 16:08:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/4 13:57:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码