热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【react】react18的学习

一、安装

一、安装

$ create-react-app [Project name]

  • 默认支持sass

二、核心依赖

react:react 核心

react-dom:用于开发渲染web 应用;

react-scripts:封装webpack服务;

"start": "react-scripts start",// 开发环境"build": "react-scripts build",// 生产环境打包"test": "react-scripts test",// 单元测试"eject": "react-scripts eject"// 暴露配置,用于自定义修改

react-native:用于开发渲染 App 应用;

三、暴露配置文件

$ yarn eject

新增文件


  • config 文件夹:react框架webpack的配置
  • scripts 文件夹:项目运行的构建脚本文件

配置修改

1、解决严格模式eslint报错

// package.json
"babel": {"presets": [["babel-preset-react-app",false],"babel-preset-react-app/prod"]}

常见配置修改

  • 移除默认的 sass,使用 less 替换;config\webpack.config.js

  • 增加别名:@==》src;config\webpack.config.js

alias: {'@': paths.appSrc,

  • 修改端口号

// scripts\start.js
const DEFAULT_PORT = parseInt(process.env.PORT, 10) || 3000;
const HOST = process.env.HOST || '0.0.0.0';
// 方式一:直接修改
const DEFAULT_PORT = parseInt(process.env.PORT, 10) || 9527;
const HOST = process.env.HOST || '127.0.0.1';
// 方式二:修改环境变量 process.env
// 安装:yarn add cross-env
// 修改启动脚本:"start": "cross-env PORT=9527 node scripts/start.js",

  • 修改浏览器兼容:package.json==>browserslist

// 这里可以实现对【postcss-loader:控制css3的前缀】生效
// 这里可以实现对【babel-loader:控制ES6的转换】生效
// 还有一个ES6内置API的转换需要额外配置【@babel/polyfill】;
方式一:在入口文件之间引入该依赖包;
方式二:使用提供的react-app-polyfill(react对上面依赖包的重写)
// 入口文件引入

  • 配置开发环境代理

// src\setupProxy.js
// yarn add http-proxy-middleware
// vue 代理devServer: {port: 8080, // 本地跑的端口,默认是8080,proxy: {"/api": { // 请求路径中含 /apitarget: "http://localhost:9000", 目标服务器},},}
//react 代理
const { createProxyMiddleware } = require('http-proxy-middleware')
module.exports = function (app) {app.use(createProxyMiddleware('/jian', {target: 'https://www.jianshu.com/asimov',changeOrigin: true,ws: true,pathRewrite: { '^/jian': '' },}));app.use(createProxyMiddleware('/zhi', {target: 'https://news-at.zhihu.com/api/4',changeOrigin: true,ws: true,pathRewrite: { '^/zhi': '' },}));
}

四、MVC和MVVM


react 思想

MVC:model数据 (state)> view视图 > controller 控制器 > model数据

  • 数据驱动视图,

  • 视图改变数据,需要开发者手动实现;


vue 思想

MVVM:model数据 > viewModel 数据视图监听层 > view视图 > vm

双向驱动:

  • 数据驱动视图:m > vm > v,通过绑定

  • 视图驱动数据:v >vm >m,通过监听


五、jsx


胡子语法{}:必须是js表达式;


  • number/string:原样输出,其他基本类型显示为空;
  • 对象:数组纯数字可以,其他报错
  • 行内样式:style={{fontSize:“12px”}};驼峰命名;
  • 类名:className=“box”
  • 常用写法:
    • 三元运算符(判断);
    • Array.map()(循环)返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值;不会改变原始数组;

底层机制


  • 第一步:将jsx语法编译成虚拟DOMvirtual DOM

  • 第二步:首次渲染将整个虚拟DOM渲染成真实DOM;

  • 第三步:后续数据改变,通过dom-diff算法进行新老虚拟dom对比,以最少的修改操作真实DOM打补丁;

  • 相比原生dom操作,多了首次生成虚拟dom的时间;

  • 后续页面修改就比原生快了,所以框架用于页面交互的项目,静态页面没必要用;


编译插件


  • babel-preset-react-app
  • 此插件,将jsx标签内容解析为React.createElement([元素标签名],[属性对象],[元素子节点]...)
  • createElement()方法执行后生成一个对象:即虚拟DOM={},也有人称之为:JSX对象、JSX元素、ReactChild对象等
  • 可在Babel官网在线解析生成;
    在这里插入图片描述
    在这里插入图片描述

推荐阅读
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • Spring学习(4):Spring管理对象之间的关联关系
    本文是关于Spring学习的第四篇文章,讲述了Spring框架中管理对象之间的关联关系。文章介绍了MessageService类和MessagePrinter类的实现,并解释了它们之间的关联关系。通过学习本文,读者可以了解Spring框架中对象之间的关联关系的概念和实现方式。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • 本文介绍了如何清除Eclipse中SVN用户的设置。首先需要查看使用的SVN接口,然后根据接口类型找到相应的目录并删除相关文件。最后使用SVN更新或提交来应用更改。 ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • (三)多表代码生成的实现方法
    本文介绍了一种实现多表代码生成的方法,使用了java代码和org.jeecg框架中的相关类和接口。通过设置主表配置,可以生成父子表的数据模型。 ... [详细]
author-avatar
侯贵聪_680
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有