从0-1实战react项目

news2025/1/6 19:08:49

文章目录

  • 1. 安装
  • 2. 完成一个组件开发
  • 3. 添加路由
  • 3. 引入element-react
          • 1. 运行发现报错./node_modules/element-react/dist/npm/es5/src/locale/format.js
          • 2. 接着又报错The <Router /> component appears to be a function component that returns a class instance. Change Router to a class that extends React.Component instead. If you can't use a class try assigning the prototype on the function as a workaround. `Router.prototy
          • 3. 再次启动发现之前设置的router失效了,没办法只能重新设置
          • 4. 报错Warning: Legacy context API has been detected within a strict-mode tree. The old API will be supported in all 16.x releases, but applications using it should migrate to the new version. Please update the following components: Menu, MenuItem, MenuItemGro
          • 5. 报错src/reportWebVitals.js Line 0: Parsing error: Cannot find module 'babel-plugin-transform-runtime'
          • 6. 使用From组件时候提示“refs”已弃用。
      • 1. NavMenu 导航菜单结合react-router-dom使用方式
  • 4. react基础知识
      • 1. 生命周期: 三阶段分为 挂载,更新,卸载
  • 5. 添加axios并做跨域代理设置
        • 1. 添加axios
        • 2. 使用http-proxy-middleware实现代理
  • 待更新。。。。


1. 安装

准备:要求:Node >= 8.10 并且 npm >= 5.6

1.全局安装
npm install -g create-react-app
2. 创建项目
npx create-react-app my-react
成功后
在这里插入图片描述

2. 完成一个组件开发

  1. 新建组件ShoppingList
    在这里插入图片描述

  2. 引入组件
    在这里插入图片描述
    注意:组件导出和引入方式一一对应

1. export { ShoppingList };导出方式,对应import {ShoppingList} from './index/index.js'
2. export default ShoppingList;导出方式,对应import ShoppingList from './index/index.js'
  1. 运行后
    在这里插入图片描述

3. 添加路由

  1. 安装 npm install react-router-dom
    报错: 1.
    Attempted import error: ‘Switch’ is not exported from ‘react-router-dom’ (imported as ‘Switch’).
    ERROR in ./src/App.js 14:37-43
    export ‘Switch’ (imported as ‘Switch’) was not found in ‘react-router-dom’ (possible exports:
    因为react-router-dom 6.0以后 Switch 不能用 我直接安装的最新版本是"^6.11.2"

改成:
在这里插入图片描述

3. 引入element-react

  1. 安装:npm i element-react --save
  2. 主题包: npm install element-theme-default --save
  3. 引入:
//element-react-ui
import ReactDOM from 'react-dom';
import 'element-theme-default';
1. 运行发现报错./node_modules/element-react/dist/npm/es5/src/locale/format.js

那就安装依赖npm install react-hot-loader@next --save再次运行就好了

2. 接着又报错The component appears to be a function component that returns a class instance. Change Router to a class that extends React.Component instead. If you can’t use a class try assigning the prototype on the function as a workaround. `Router.prototy

我是先设置好router才安装的element react要重新安装下npm i react-hot-loader -save就好了

3. 再次启动发现之前设置的router失效了,没办法只能重新设置
  1. app.js中使用
    在这里插入图片描述
  2. 两个页面文件内容
    在这里插入图片描述
  3. 运行结果
    在这里插入图片描述

在这里插入图片描述

4. 报错Warning: Legacy context API has been detected within a strict-mode tree. The old API will be supported in all 16.x releases, but applications using it should migrate to the new version. Please update the following components: Menu, MenuItem, MenuItemGro

直接关闭<React.StrictMode></React.StrictMode>标签 ,不要提示
在这里插入图片描述

5. 报错src/reportWebVitals.js Line 0: Parsing error: Cannot find module ‘babel-plugin-transform-runtime’

报着缺什么补什么npm install babel-plugin-component -D
之后清理缓存npm cache clean --force
重新npm install
运行就好了

6. 使用From组件时候提示“refs”已弃用。

在这里插入图片描述
更换成React.createRef()
在这里插入图片描述

1. NavMenu 导航菜单结合react-router-dom使用方式

自己捯饬好久,刚开始分开两个页面写的关联不到一起,引入link就报错,最后写在一个页面就好的,具体原因还没研究
在这里插入图片描述
在这里插入图片描述
以上还没有完全动态更新,router标签内容还是单独写的。下边是根据router.js文件使用的动态更新方式
在这里插入图片描述

4. react基础知识

1. 生命周期: 三阶段分为 挂载,更新,卸载

  1. 挂载:
  1. constructor():组件被创建时调用,用于初始化组件的状态和绑定方法。

  2. static getDerivedStateFromProps(props, state):在组件挂载之前和更新时调用,用于根据 props 计算 state 的值。

  3. render():在组件挂载时调用,用于渲染组件的 UI。

  4. componentDidMount():在组件挂载后调用,用于执行一些副作用操作,例如网络请求或订阅事件。

使用方法:
声明变量的两种方法:1. 直接var let const 变量名字=值。 2. 在constructor方法里边使用this.state.变量名字=值(这种方法获取也要用this.state。。。)

在这里插入图片描述

  1. 更新

static getDerivedStateFromProps(props, state):在组件挂载之前和更新时调用,用于根据 props 计算 state 的值。
shouldComponentUpdate(nextProps, nextState):在组件更新时调用,用于判断是否需要重新渲染组件。
render():在组件更新时调用,用于渲染组件的 UI。
getSnapshotBeforeUpdate(prevProps, prevState):在组件更新时调用,用于获取更新前的 DOM 状态。
componentDidUpdate(prevProps, prevState, snapshot):在组件更新后调用,用于执行一些副作用操作,例如更新 DOM 或订阅事件。

使用方法:在组件挂载之前和更新时调用,用于根据 props 计算 state 的值。

在这里插入图片描述

  1. 卸载

componentWillUnmount():在组件卸载前调用,用于清理组件的副作用操作,例如取消网络请求或取消订阅事件。

除了上述生命周期方法外,还有一些其他的方法,例如 componentDidCatch() 用于处理组件中的错误,getDerivedStateFromError() 用于根据错误计算组件的状态等。

5. 添加axios并做跨域代理设置

1. 添加axios

  1. 下载安装
npm install axios
  1. 引入使用
import axios from 'axios';
axios.get('/api/data')
  .then(response => {
    console.log(response.data);
  })
  .catch(error => {
    console.log(error);
  });

2. 使用http-proxy-middleware实现代理

  1. 下载安装
npm install http-proxy-middleware --save-dev
  1. 项目的根目录下创建一个 setupProxy.js 文件
const { createProxyMiddleware } = require('http-proxy-middleware');

module.exports = function(app) {
  app.use(
   "/api",
    createProxyMiddleware( {
      "target": '地址',
      "secure": false,
      "changeOrigin": true,
      "pathRewrite": {
        '^/api': ''
      }
    })
  );
};
  1. react 使用createProxyMiddleware 多了/api
    刚开始请求发送到后端就莫名多了一个api/,是因为代理配置没做好,根据以上配置好之后重新运行就好了

待更新。。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/602689.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[SpringBoot]关于Profile配置文件关于Slf4j日志

关于Profile配置文件 在Spring系列框架中&#xff0c;关于配置文件&#xff0c;允许同时存在多个配置文件&#xff08;例如同时存在a.yml、b.yml等&#xff09;&#xff0c;并且&#xff0c;你可以按需切换某个配置文件&#xff0c;这些默认不生效、需要被激活才生效的配置&am…

【ProtoBuf】protobuf序列化协议

Protobuf介绍 Protobuf (Protocol Buffers) 是谷歌开发的一款无关平台&#xff0c;无关语言&#xff0c;可扩展&#xff0c;轻量级高效的序列化结构的数据格式&#xff0c;用于将自定义数据结构序列化成字节流&#xff0c;和将字节流反序列化为数据结构。所以很适合做数据存储…

容器底层实现技术

一、Namespace 和 Cgroup 1、容器技术发展历史 2、Docker 容器实现原理 1. Docker 容器在实现上通过 namespace 技术实现进程隔离&#xff0c; 通过Cgroup 技术实现容器进程可用资源的限制 3、Namespace Namespace &#xff1a;命名空间 1. 作用&#xff1a;资源隔离 2. 原理&…

web前端课程作业设计:个人简历

一.说明 今天博主的web前端选修课结课了&#xff0c;期末大作业也提交了&#xff0c;今天写一篇博客把我的大作业分享给大家。 二.题目 1. 大作业题目 个人简历主页设计 2. 内容要求 应尽量包含以下内容&#xff1a; 包含个人基本信息、教育背景、个人风采、与我联系四块…

企业四要素核验-企业四要素核验接口-api接口

接口地址&#xff1a; https://登录后显示/pyi/184/358(支持:http/https)) 在线查询&#xff1a;https://www.wapi.cn/api_detail/184/358.html 网站地址&#xff1a;https://www.wapi.cn 返回格式&#xff1a;json,xml 请求方式&#xff1a;GET,POST 请求说明&#xff1a; …

【实用篇】Elasticsearch01

分布式搜索引擎01 – elasticsearch基础 1.初识elasticsearch 1.1.了解ES 1.1.1.elasticsearch的作用 elasticsearch是一款非常强大的开源搜索引擎&#xff0c;具备非常多强大功能&#xff0c;可以帮助我们从海量数据中快速找到需要的内容 例如&#xff1a; 在GitHub搜索…

智慧公厕系统如何通过物联网技术提高公厕的管理效率

智慧公厕系统可以通过物联网技术&#xff0c;实现公共卫生间的智能化管理和服务&#xff0c;提高管理效率。本文将详细介绍智慧公厕系统如何通过物联网技术提高公共卫生间的管理效率&#xff0c;从硬件、软件、系统等方面逐一分析。 XP-智慧厕所方案-HYF20230328&#xff08;16…

工业企业为什么要用边缘计算网关?

在我们进入智能制造和工业4.0的新时代&#xff0c;工业企业的数据需求正急速增长。传感器&#xff0c;机器和设备每分钟都在产生大量数据&#xff0c;它们对实时处理和分析的需求比以往任何时候都要强烈。这就是为什么工业企业需要边缘计算网关。 边缘计算网关在物联网架构中担…

大数据:Apache hive分布式sql计算平台,hive架构,hive部署,hive初体验

大数据&#xff1a;Apache hive分布式sql计算平台 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都得去找开发&#xff0c;测开 测开的话&#xff0c;你就得学数据库&#xff0c;sql&#xff0c;oracle&a…

Java002——JDK的安装以及配置环境变量

为什么要安装jdk 1、JDK 全称 Java Development Kit&#xff0c;意为 Java 开发工具。&#xff0c;要想开发java程序就必须安装JDK。没有JDK的话&#xff0c;无法编译运行Java程序。 2、JDK包含的基本组件包括以下文件&#xff1a;   javac.exe,用于编译java文件&#xff0c…

不经意传输(OT)了解

概述 OT&#xff0c;不经意传输&#xff0c;常被大量用于安全多方计算中&#xff0c;能够很大程度决定一个SMPC协议的效率。它的核心概念是接收方可以从发送方&#xff08;持有秘密信息&#xff09;手中选择性接收自己想要的信息而接收方对所选择的信息内容一无所知。目前有2-…

乐谱文件转换,支持批量mscz、mxl、musicxml转mp3等格式

我是一个喜欢听音乐的人&#xff0c;每天都会在路上听着歌放松自己。但是有时候想要听的歌并没有下载下来&#xff0c;或者格式不兼容。 最近我发现了一个神奇的软件——mscz转mp3&#xff0c;可以把乐谱文件转成mp3格式&#xff01; 软件界面简洁明了&#xff0c;使用也非常…

js的Bom操作

1.认识Bom ◼ BOM&#xff1a;浏览器对象模型&#xff08;Browser Object Model&#xff09;  简称 BOM&#xff0c;由浏览器提供的用于处理文档&#xff08;document&#xff09;之外的所有内容的其他对象&#xff1b;  比如navigator、location、history等对象&#xff1…

YOLOv5改进系列(6)——替换主干网络之 ShuffleNetV2

【YOLOv5改进系列】前期回顾: YOLOv5改进系列(0)——重要性能指标与训练结果评价及分析 YOLOv5改进系列(1)——添加SE注意力机制

预约直播|揭秘鸿蒙全新流量阵地,元服务带来的体验变革

【导读】 在PC 互联网到移动互联网的演进过程&#xff0c;随着人们对交互和信息获取的智能化要求越来越高&#xff0c;移动终端上的应用生态发展到今天也面临着变革。传统厚重的App&#xff0c;功能齐全&#xff0c;但开发成本高、周期长&#xff0c;且存在搜索、安装、卸载等…

Mybatis-Plus实战

文章目录 #简介#特性#支持数据库总结1、Mybatis-Plus常用注解2、[条件构造器](https://www.baomidou.com/pages/10c804/#abstractwrapper)2.1 介绍2.2 条件 3、Mybatis-Plus属性配置3.1 Mybatis-Plus常用配置项3.2 mybatis-plus.configuration. 下配置项3.3 配置小结 4、CRUD实…

javascript基础十四:解释下什么是事件代理?应用场景?

一、是什么 事件代理&#xff0c;俗地来讲&#xff0c;就是把一个元素响应事件&#xff08;click、keydown…&#xff09;的函数委托到另一个元素 前面讲到&#xff0c;事件流的都会经过三个阶段&#xff1a;捕获阶段 -> 目标阶段 -> 冒泡阶段&#xff0c;而事件委托就是…

MFA多因素认证:保护你的邮箱、VPN等账户免遭黑客入侵

多因素认证&#xff08;MFA&#xff09;是防范黑客攻击的重要防线之一。在密码被越来越容易被破解的情况下&#xff0c;多因素认证让你的账户更加安全。本文将详细讲解多因素认证是什么、如何工作以及如何设置多因素认证来保护你的账户。 什么是MFA多因素认证 简单地说&#xf…

AIGC+开放式社交,为年轻人注入了新的“Soul”?

5月21日全国助残日&#xff0c;Soul App举办了一场与众不同的线上公益活动&#xff0c;邀请视障用户担任“见习解忧师”&#xff0c;诉说世界更多角落“不完美”的故事&#xff0c;展示人生更多可能&#xff0c;传递温暖与爱。 参与此次派对的“见习解忧师”都是Soul平台上充满…

OTP动态口令身份认证的多种形式

密码无处不在&#xff0c;但却出了名的弱。因此需要新的工具和技术来减少或减轻账户被接管&#xff08;ATO&#xff09;的风险。OTP动态口令身份认证的主要目的就是要确保该用户的身份足够可信。现在&#xff0c;最常见的方法是通过增加某种认证令牌来提供MFA多因素认证。 令牌…