从0-1实战react项目

news/2025/2/12 8:16:26/

文章目录

  • 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.ppmy.cn/news/171957.html

相关文章

Allegro16.6详细教程(一)

第一章User Interface 本章的主要內容介紹allegro操作介面,透過本章學習可以對Allegro的工作介面有了大致的瞭解,同時也能體驗出Allegro PCB Layout時的強大功能。 A.程式的啟動 除了以上Allegro主程式,我們還會常用到以下幾個常用工具: • Padstack Designer (Padstack…

Android view获取屏幕中的坐标点x,y、位置:

Android view获取屏幕中的坐标点&#xff0c;位置&#xff1a; int[] pointnew int[2];img1.getLocationOnScreen(point);//执行之后&#xff0c;point[0]是x坐标&#xff0c;point[1]是y坐标 layoutManager.scrollToPositionWithOffset(1,y);这里如果y坐标值&#xff0c;如果…

flutter内容超出屏幕Y轴高度边界报错

编写flutter代码的时候&#xff0c;如果超出手机屏幕高度的话是会出错的&#xff0c;需要使用SingleChildScrollView来包裹 SingleChildScrollView和container用发一样&#xff0c; 直接包在外层就好了&#xff0c;里面是child’ 它可以在主题内容超出Y轴的时候自动生成滚动条&…

y7000p屏幕亮度低_联想拯救者y7000p怎么样 评测结果揭晓屏幕优点

近年来&#xff0c;“游戏本”这一概念逐渐出现在我们的生活中&#xff0c;深受广大游戏爱好者的追捧。联想作为知名的电脑品牌&#xff0c;它旗下拥有多个系列与型号的笔记本。而拯救者就是该品牌比较热销的一个游戏本系列&#xff0c;那么下面小编就来给大家具体说说联想拯救…

Android屏幕适配

一、一些基本概念 1、长度&#xff08;真实长度&#xff09;&#xff1a;英寸、inch 2、分辨率&#xff1a;density 每英寸像素数 dpi&#xff08;密度&#xff09; 3、像素&#xff1a;px 4、dip的公式&#xff1a;px /dipdpi/160 所以 dip 类似于英寸、长度&#xff08;dpdi…

Android 获取屏幕大小以及尺寸

在Android开发中&#xff0c;获取手机屏幕像素的方法有多种。在这里&#xff0c;我仅仅做一个小小的总结&#xff0c;将这些方法分为两类。一类是使用Activity类来获取&#xff0c;另一类便是使用上下文&#xff08;Context&#xff09;来获取。 /*** 获取当前手机屏幕的尺寸…

联想Y450 gt130m显卡驱动安装

在这里要赞一下unbuntu的视觉效果&#xff0c;很赞&#xff0c;不知道10.04以前的版本有没有这种效果&#xff1a;首先开启受限驱动&#xff0c;然后官网下载最新驱动.run文件&#xff0c;改名成NVIDIA.run。 在root模式下安装后&#xff0c;logo变大了。没关系有办法&#xff…

联想拯救者y7000电池耗电快_联想拯救者Y7000P使用一周体验

Anson 买Y7000P可能算是我这么久以来最谨慎的一次购物了,不过可能也是我最满意的购物之一。 到手的那天看着拯救者黑色的包装就已经喜欢上了。作为一个电子设备强迫症,对于包装严谨的水印封条也是非常的满意,很大程度避免了二手机。 首先说一下配置。Y7000P I5 8300H,1050ti…