react 整合

electron整合react入门(踩坑)记录(2) 1. 前言      在electron入门(踩坑)记录(1)(https://blog.youkuaiyun.com/qq_15241071/article/details/85049159)中,才刚刚运行出来electron官方demo,没高兴几秒,然后在简书electron+react教程中(https://www.jianshu.com/p/ea0852003209),用create-react-a... 阅读详情

一、脚手架创建项目 create-react-app

//局部创建
局部创建create-react-app
yarn init -y
yarn add -D create-react-app
创建项目
npx create-react-app  react-demo1
//全局创建
npm install -g create-react-app
create-react-app 项目名

二、css模块化

在react中可以将css模块化,例如home.jsx页面的css样式可以新建一个home.module.css文件里面写样式,例如:

.wrap{
    width:100px;
    height:100px;
    background:#ccc;
}
.active{
    color:#999;
}

使用:在组件中引入

import styles from './home.module.css'
function App(){
    return (
        <div className={styles.wrap}></div>
    )
}

三、hooks

1.useState()  维护函数内的状态

使用:

import {useState} from 'react'
function App(){

    let [id,setId] = useState(0);
    return (
        <div>{id}</div>
        <button onClick={()=>{setId(2)}}>修改id</button>
    )
}

手写setsState

function useState(iniState)(){
    let state = iniState
    const setState = newState=>{
        state = newstate;
         render();
    }

    return [state,setState]

}

2.useCallback

import { useState,useEffect } from "react";
function App() {
  let [state,setState] = useState(0);
 useEffect(()=>{
   console.log('我被触发了·')
 },[money])
 
 const test = ()=>{
  console.log(state)
  console.log('函数test被执行了',state)
 }


  return (
    <div className="App">
      Hooks
      <p>{state}</p>
      <p>{money}</p>
      <button onClick={()=>{setState(state+1)}}>add 1</button>
      <button onClick={test}>调用callback</button>
    </div>
  );
}

export default App;

在这里外部state点击改变数据后,执行test函数每次test都可以拿到最新的值,说明每次test函数都是最新的函数,会浪费性能,这个时候useCallback的作用就是缓存函数,依赖更新函数才会更新,传入空数组[],就不会更新函数console.log(state)这个时候就打印的是初始值,数组中传入了变量,就会根据变量的改变来更新函数,如果不传递,不缓存每次都更新。

import { useState,useEffect,useCallback } from "react";
function App() {
  let [state,setState] = useState(0);
 useEffect(()=>{
   console.log('我被触发了·')
 },[money])
 
 useCallback(()=>{
     console.log(state)
      console.log('函数test被执行了',state)
 },[])


  return (
    <div className="App">
      Hooks
      <p>{state}</p>
      <p>{money}</p>
      <button onClick={()=>{setState(state+1)}}>add 1</button>
      <button onClick={test}>调用callback</button>
    </div>
  );
}

export default App;

3.useEffect()  effect副作用,与渲染无关的行为都是副作用

是生命周期的集合(componentDidMount,componmentDidUpdate componmentWillUnmount)

使用:

useEffect(()=>{},[]);

接受两个参数,第一个是回调函数,第二个是一个数组,如果空数组不执行回调,如果传入变量,依赖的变量改变回调就会执行,什么都不传只有数据有更新回调就会执行

 useEffect(()=>{
   console.log('我被触发了·传入money')
 },[money])
 useEffect(()=>{
  console.log('我被触发了·传入空数组')
},[])

useEffect(()=>{
  console.log('我被触发了·啥都不传')
},)

在useEffect中也可以清除定时器,监听操作(清除副作用)


清除定时器

useEffect(()=>{

    return ()=>{
	在这里清除
    }
})

4.useMemo();计算结果并根据依赖缓存使用方法和useEffect类似

  • useEffect用于执行副作用操作,可以在组件渲染完成后执行,也可以在依赖项发生变化时执行。
  • useMemo用于缓存计算结果,可以在组件渲染过程中使用,当依赖项发生变化时重新计算。
  • useEffect和useMemo都可以通过指定依赖项来控制执行时机,但useEffect的依赖项是可选的,而useMemo的依赖项是必须的。

5.useContext()  

首先,我们需要创建一个Context对象,用于共享数据:


// 创建一个Context对象
const MyContext = React.createContext();

// 创建一个Provider组件,用于提供共享数据
const MyProvider = ({ children }) => {
  const sharedData = "Hello, useContext!";

  return (
    <MyContext.Provider value={sharedData}>
      {children}
    </MyContext.Provider>
  );
};

然后,在需要使用共享数据的组件中,使用useContext来获取共享数据:


// 使用共享数据的组件
const MyComponent = () => {
  // 使用useContext获取共享数据
  const sharedData = React.useContext(MyContext);

  return <div>{sharedData}</div>;
};

最后,在应用的根组件中,使用MyProvider组件包裹需要使用共享数据的组件:


// 应用的根组件
const App = () => {
  return (
    <MyProvider>
      <MyComponent />
    </MyProvider>
  );
};

这样,MyComponent组件就可以通过useContext获取到共享数据,并在渲染时显示出来。

注意:使用useContext时,需要确保Provider组件包裹了需要使用共享数据的组件,否则无法获取到共享数据。

5.useRef()

const divRef = useRef(null);
<div ref={divRef}></div>

获取子组件dom

import React, { useRef } from 'react';

const ParentComponent = () => {
  const childRef = useRef(null);

  const handleClick = () => {
    // 通过ref.current获取子组件的DOM
    console.log(childRef.current);
  };

  return (
    <div>
      <ChildComponent ref={childRef} />
      <button onClick={handleClick}>获取子组件DOM</button>
    </div>
  );
};

const ChildComponent = React.forwardRef((props, ref) => {
  return <div ref={ref}>子组件</div>;
});

export default ParentComponent;

四、高阶组件

接受一个组件,返回一个组件

import React from 'react';

// 高阶组件
const withLoading = (WrappedComponent) => {
  return class extends React.Component {
    state = {
      isLoading: true
    };

    componentDidMount() {
      // 模拟异步加载数据
      setTimeout(() => {
        this.setState({ isLoading: false });
      }, 2000);
    }

    render() {
      return this.state.isLoading ? (
        <div>Loading...</div>
      ) : (
        <WrappedComponent {...this.props} />
      );
    }
  };
};

// 普通组件
const MyComponent = (props) => {
  return <div>内容加载完成</div>;
};

// 使用高阶组件包装普通组件
const MyComponentWithLoading = withLoading(MyComponent);

const App = () => {
  return (
    <div>
      <MyComponentWithLoading />
    </div>
  );
};

export default App;

五、react路由

react路由库分为

react-router-dom (浏览器)

react-router-native(app)

useParams()获取url的参数

如果URL为/users/123,则可以使用useParams()方法获取到参数123:

import { useParams } from "react-router-dom";

function User() {
  const { id } = useParams();

  return (
    <div>
      <h2>User ID: {id}</h2>
    </div>
  );
}

useLocation()用于获取当前url的信息

  • pathname:当前URL的路径部分
  • search:当前URL的查询参数部分(包括问号)
  • hash:当前URL的哈希部分(包括井号)
  • state:通过history.push()或history.replace()方法传递的状态对象

例如,如果当前URL为/users?name=John#section1,则可以使用useLocation()方法获取到以下信息:

import { useLocation } from "react-router-dom";

function MyComponent() {
  const location = useLocation();

  console.log(location.pathname); // 输出:/users
  console.log(location.search); // 输出:?name=John
  console.log(location.hash); // 输出:#section1

  return (
    <div>
      <h2>Current URL: {location.pathname}</h2>
    </div>
  );
}

useNavigate()提供了导航相关的方法,类似于useHistory()

navigate对象包含了以下方法:

  • navigate(to, options): 导航到指定的路径。to可以是一个字符串路径或一个位置对象。options是一个可选的配置对象,用于指定导航的行为。
  • replace(to, options): 替换当前路径为新的路径。to和options的使用方式与navigate()方法相同。
  • go(delta): 在历史记录中前进或后退指定的步骤。

例如,可以在点击按钮时使用navigate()方法进行导航:


import { useNavigate } from "react-router-dom";

function MyComponent() {
  const navigate = useNavigate();

  const handleClick = () => {
    navigate("/new-page");
  };

  return (
    <div>
      <button onClick={handleClick}>Go to New Page</button>
    </div>
  );
}

useHistory(),用于管理历史记录和导航

  • push(path, [state]): 将新的路径添加到历史记录栈中,并导航到该路径。可选地传递一个状态对象。
  • replace(path, [state]): 替换当前路径为新的路径,并导航到该路径。可选地传递一个状态对象。
  • go(n): 在历史记录中前进或后退n个步骤。
  • goBack(): 后退一个步骤。
  • goForward(): 前进一个步骤。

例如,可以在点击按钮时使用push()方法进行导航:

import { useHistory } from "react-router-dom";

function MyComponent() {
  const history = useHistory();

  const handleClick = () => {
    history.push("/new-page");
  };

  return (
    <div>
      <button onClick={handleClick}>Go to New Page</button>
    </div>
  );
}

useHistory(),useLocation(),useParams(),useNavigate()方法只能在被Route组件包裹的组件中使用。如果在没有被Route组件包裹的组件中使用这些方法,将会抛出错误。

路由的动态生成

import {useRoutes} from 'react'
const routes = [
    {path:'/',element:<Navigate to="/basic">},
    {path:'/basic',element:<Basic/>},
    {path:'/basic/:id',element:<Basic/>},
//嵌套路由
    {
        path:'/layout',element:<Layout/>,
        children:[
            path:'movie',element:<Movie/>
        ]
    }
    
]
const GetRoutes = ()=>{
    const elements = useRoutes(routes);
//useRoutes必须要在名称为getRoutes的方法中
    return elements ;
}

使用<getRoutes/>



import {BrowserRouter} from 'react-router-dom'
import GetRouters from "./router";

function App() {
  return (
     <>
       <BrowserRouter>
        <GetRouters/>
       </BrowserRouter>
     </>
  );
}

export default App;

memo()高阶函数里面传入一个组件,缓存组件(父组件每次重新渲染,子组件就会更新,memo高阶组件传入子组件,只有当props数据改变的时候子组件才会更新)

从前后端数据交互玩转react整合echarts 同学,一起玩react整合echarts呀 欢迎各位小伙伴一起来我公众号玩呀=>前端打怪记,一起学习呀! 阅读详情

相关推荐

React-Navigation与Redux整合详解

继react-navigation发布已经过去半年的时间,想必React Native的玩家早已玩转于

... 3513

Backbone和ReactJS的整合

Hello-React-Backbone   地址猛戳这里,PPT请看这里 目的:做Backbone和ReactJS的整合,该例子使用了Backbone的Model和ReactJS整合,可以认为是ReactJS替换掉了Backbone的View,这个是入门小例子 。 实现内容:通过传递的json数据构建Backbone的Model,将数据展现出来,点击按钮,修改数据,展示修改后的数...

zeromike 413

ReactJS与Node.js:前后端整合之道

本文探讨了如何使用ReactJS与Facebook API进行集成,以及如何使用Node.js将React应用扩展到服务器端。我们详细介绍了如何安装Node.js和npm,设置React应用程序,以及如何通过webpack等工具来优化开发流程。文章还涉及了在React中处理样式、数据获取和组件渲染的技巧,以及如何利用Node.js模块化开发和管理项目依赖。

weixin_35920379的博客 481

react-router redux整合

Redux整合 Redux是React生态系统的重要组成部分。对于想要同时使用React Router和Redux的人,我们希望使其无缝集成。 阻止的更新 通常,React Router和Redux可以很好地协同工作。不过,有时候,应用程序的组件可能会在位置更改时(子路线或活动的导航链接不更新)不更新。 在以下情况下会发生这种情况: 1.该组件通过connect()(Comp)连接到redux。 ...

weixin_46178925的博客 448

若依Vue整合积木报表实战:Token安全校验全流程解析

本文详细解析了在若依Vue后台系统中安全集成积木报表的全流程,重点阐述了Token安全校验的核心机制。通过前端菜单配置、Token传递、后端权限拦截及自定义Token服务实现,构建了一套完整的企业级报表访问安全防线,确保核心业务数据的安全可控。

t8u9v0的博客 576

qPCR定量方法在肠道微生物特定种属定量应用

大家都知道肠道中有上千种细菌,肠道微生物可参与人体代谢,促进营养物质的消化吸收,肠道微生态均衡关系到身体健康,肠道微生态失衡可能会导致疾病产生。此外有文献指出肠道微生物可能与人体免疫及炎性反应等有关。目前也越来越多人关注到疾病与肠道微生物的关系,也做了很多研究及实验,一般高通量结果得到的是每个物种在样本中的相对百分含量,而不同微生物的绝对含量其实也对疾病有很重要的影响。在此分享几篇有采用qPCR方法研究疾病与肠道微生物关系的文章。 早在2013年Kim-Anne Lê1、Yan Li等人发表文章Alter

tinygene的博客 2143

springboot整合前端react项目

由于最近公司为了节省成本,尽快上线,需要将前端开发的react项目整合到后端springboot项目中,直接使用,减少一系列的审批流程。。。 纯小白,如有问题请留言多交流,还请路过的大佬多指点。 1.创建springboot项目,引入pom文件 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spr.

zhangxl123liang的博客 3584

树莓派5首次开机保姆级教程(无显示器通过VNC连接树莓派桌面)

选择 Interface Options > VNC > Yes 启用服务。2.在Windows电脑上安装VNC软件。重启树莓派:sudo reboot。3.使用VNC远程访问树莓派桌面。

qq_34184505的博客 2349

如何免安装服务器将 React 整合进 Spring Boot

如何将 React 整合进 SpringBoot下载 SpringBoot 官方 demo下载 React 官方 demo开始整合使用 Spring MVC 控制器导向 React将 React 打包文件置入 SpringBoot 更深的文件夹中使用本地资源路径停止 SpringBoot完整代码 运行环境: React 环境: React 16.13.0 npm 8.3.1 webpack 5.68.0 WebStorm 2021.3 SpringBoot 环境: Java

暗诺星刻的博客 3991

深入解析HAL_UART_Receive_IT:如何高效配置串口中断接收

本文深入解析了STM32 HAL库中`HAL_UART_Receive_IT`函数的工作原理与高效配置方法。该函数并非直接接收数据,而是作为中断接收的启动器和配置器,通过开启相关中断,由`UART_Receive_IT`在后台完成数据搬运。文章详细对比了中断与轮询模式的区别,并提供了不定长数据接收的完整实战流程、常见问题避坑指南及高级应用技巧,帮助开发者构建稳定高效的串口通信。

weixin_29162439的博客 626

一个完整的c#股票分析软件源码

完整的c#股票分析软件源码

qq_35600909的博客 4595

REACT整合前后端步骤总结

REACT整合前后端步骤总结: 1.<Button onClick: <Button type="primary" style={{ width: '100%' }} onClick={({ key = 'create' }) => this.createAction(key)} > <Ico

u010245179的博客 810

示波器核心参数选型指南:带宽、采样率与嵌入式调试实战

示波器是电子工程师进行信号观测与故障诊断的基础仪器,其性能由带宽、采样率、通道数、存储深度、触发系统和探头特性共同决定。带宽定义高频响应边界,需遵循5倍法则以保障数字信号上升沿测量精度;采样率则依据奈奎斯特定理并结合工程冗余(通常≥2.5×带宽)实现可靠时域重建。二者协同影响信号完整性评估能力,尤其在UART、I²C、SPI等嵌入式总线调试中至关重要。高存储深度支持长时捕获与毛刺定位,智能触发与硬件协议解码进一步将波形分析升维至语义级。本文围绕真实嵌入式场景,解析参数间的耦合关系与典型误用陷阱。

weixin_42588877的博客 91

《Ember-React整合指南》

《Ember-React整合指南》 项目目录结构及介绍 仓库 ember-react 是一个集成 Ember.js 和 React.js 的示例项目,展示了如何在 Ember 应用中嵌入并使用 React 组件。以下是对项目典型目录结构的解析: 主要目录结构 app: 存放所有的 Ember 组件、模板、模型和服务等。 可能在其中找到与 React 集成相关的组件或装饰器。 node...

gitblog_00517的博客 610

【网络安全】AntSword蚁剑新手快速入门(附实战案例)

蚁剑(AntSword)是一款开源的跨平台WebShell管理工具,它主要面向于合法授权的渗透测试安全人员以及进行常规操作的网站管理员。蚁剑的特点主要有如下几点:1.支持多平台。包括macOS、Linux 32位、Linux 64位、Linux armv7l、Linux arm64、Windows 32位、Windows 64位。2.完善的文档。中国蚁剑文档地址。3.多项功能。文件管理功能、虚拟终端功能、数据库管理功能。4.内置代理功能。

等风来 1万+

用miniconda建立PyTorch、Keras、TensorFlow三个环境

如果还没有安装Miniconda,请从[Miniconda官网](https://docs.conda.io/en/latest/miniconda.html)下载合适的版本并进行安装。如果遇到问题,可以通过编辑`~/.condarc`文件来临时禁用某个源,或者通过`conda config --remove channels`命令来移除配置的镜像源。要切换到不同的环境,先使用`conda deactivate`命令退出当前环境,再用`conda activate 环境名称`命令激活另一个环境。

数字人生 2464

Elasticsearch与React的整合

1.背景介绍 Elasticsearch是一个分布式、实时的搜索和分析引擎,基于Lucene库,可以快速、高效地存储、检索和分析大量数据。React是一个用于构建用户界面的JavaScript库,由Facebook开发。在现代Web应用程序中,React被广泛使用,因为它提供了高性能、可维护性和可扩展性。 在许多场景下,将Elasticsearch与React整合在一起可以带来很多好处。例如,...

AI天才研究院 825

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Angular.js、React.js整合

angularjs、reactjs整合,使用reactjs渲染页面加速性能。

哆啦咪^Pluser 4810

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

React前端和spring boot 后端整合

React框架是一个纯前端的框架,它可以帮助我们高效率的开发前端界面。当前端界面开发完成后,就需要接入后端数据,那如何进行与后端整合呢。肯定不是CV就能解决的 步骤 1、在package.json文件创建主页的标识 在package.json文件中的“private”属性后面添加“homepage”属性,生成定义的项目文件 "name": "front", "version": "0.1.0"...

华小灼 2355

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

react native里react-navigation与redux + react-navigation-redux-helpers插件整合方法及样例代码

react-navigation与redux + react-navigation-redux-helpers插件整合方法以前也做react-navigation与redux的整合,不过那时候react native以及react-navigation的版本都不高,前些天在做新项目时用的是rn0.54版本,react-navigation是1.3.0版本,当我按照低版本的方法进行整合时缺报错了,让...

clf_programing 4853

【学习】reactjs(一)——使用npm创建react项目并整合elementUI

在实习的过程中了解了react,所以打算使用react搭建一个属于自己的页面,如有问题请教正,谢谢。 Github:https://github.com/yclxt/react-elementUI 工具: 使用工具:nodejs;Jetbrains WebStorm nodejs的安装和配置环境变量这里就不写了。 创建过程: 命令行安装全局create-react-app脚手架工...

weixin_30562507的博客 270

React Native Paper 与 React Navigation 的深度主题整合指南

React Native Paper 与 React Navigation 的深度主题整合指南 【免费下载链接】react-native-paper callstack/react-native-paper: React Native Paper是由Callstack团队开发的一套遵循Material Design规范的...

gitblog_01109的博客 489

Springboot+React前后端整合

Springboot+React前后端整合

hxh_cjm的博客 1916

react与框架整合

结合网络相关文档,记载react如何与线下框架整合,大神请绕道 gulp+require+backbone+react,借鉴github上demo梳理一下 大神github地址 https://github.com/phodal/backbone-react 1.页面结构    与传统搭建无异,require加载入口文件 script data-main="src/script/

u013261261的专栏 1509

React Native和Android整合详解

前言 按照React Native的迭代速度,使用官网的文档,已经不能很顺利的实现ReactNative和Android的有效整合。React Native最新版本 已经是0.39。为了更好的讲解React Native和Android的整合我这里列出我本地的环境: Android Stuidio 2.2稳定版 64位win7操作系统 红米note...

weixin_33919950的博客 244

如何在已有的iOS APP原生代码中整合React Native

核心概念 # React Native is great when you are starting a new mobile app from scratch. However, it also works well for adding a single view or user flow to existing native applications. With a few step

c00129878的专栏 3445
上一篇: Vue3学习
下一篇: react状态管理工具reduxjs/toolkit用法
小蒋小蒋快乐成长
博客等级 码龄9年 2109粉丝 120原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值