React高级内容探索

flushSync确保了DOM立即更新

flushSync让你强制React同步刷新提供回调中的任何更新,这确保了DOM立即更新

flushSync是DOM更新之后的,像vue中的nextTick:

import { useState,useRef} from "react"
import { flushSync} from "react-dom"

function App(){
    const [count,setCount] = useState(0)
    const [count2,setCount2] = useState(0)
    const ref = useRef(null)
    const handleClick = ()=>{
        flushSync(()=>{
            setCount(count + 1)
            setCount2(count2+1)
        })
        console.log(ref.current.innerHTML)
    }
    return(
        <div>
            hello App
            <button onClick={handleClick}>
                点击
            </button>
            <div ref={ref}>
                {count},{count2}
            </div>
        </div>
    )
}

export default App

flushSync可以取消自动批处理(没有太大意义)

 使用error bountary(错误边界)捕获渲染错误

默认情况下,如果您的应用程序在渲染期间抛出错误,React将从屏幕上移除其UI,为了防止这种情况,可以将UI的一部分包装到错误边界中,错误边界是一种特殊组件,可让我显示一些后备UI而不是崩溃的部分,例如错误信息

想要使用错误边界一般可以采用第三方支持:react-error-boundary

使用前先安装:

npm install classnames react-error-boundary
import {classNames} from 'classnames'
import { ErrorBoundary } from 'react-error-boundary'

function Head() {
  classNames()
  return <div>hello Head</div>
}

function App() {
  return (
    <div>
      hello App
      {/* <Head />   白屏崩溃    */}
      <ErrorBoundary fallback={<div>Something went wrong</div>}>
        <Head />
      </ErrorBoundary>
    </div>
  )
}

export default App

 这样以后会抛出错误,让我们更加明晰错误边界

lazy与<Suspense>懒加载的组件

lazy指的是能让我在组件第一次被渲染之前延迟加载组件的代码

<Suspense/>允许您显示回退,知道子项完成加载

有的东西没有使用但是还是在加载

能不能到用的时候再加载,可以的兄弟,可以的(饿汉模式和懒汉模式一样)

lazy与懒加载的组件.jsx:

import { useState,lazy,Suspense } from "react"
// import MyHead from "./MyHead.jsx"
const MyHead = lazy(()=>import('./MyHead.jsx'))

function App(){
    const [show,setShow] = useState(false)
    return(
        <div>
            hello World
            <button onClick={()=>setShow(true)}>点击</button>
            <Suspense fallback = { <div>loading...</div> } >
                {show && <MyHead/>}
            </Suspense>
        </div>
    )
}
export default App

MyHead.jsx:


console.log('myhead')

function MyHead(){
    return(
        <div>
            hello World
        </div>
    )
}
export default MyHead

createPortal渲染到DOM的不同部分

import { useState } from 'react'
import { createPortal } from 'react-dom'

function App() {
    const [count,setCount] = useState(0)
  return (
    <div>
      hello App
      {createPortal(<p onClick={()=>setCount(count+1)}>这是一个段落,{count}</p>, document.querySelector('body'))}
    </div>
  )
}
export default App

这是把它渲染到body里面

<Profiler>和ReactDevTools的性能测试

<Profiler>让您以编程方式测量React树的渲染性能

import { useState,Profiler } from "react"

function Head({count}){
    return (
        <div>
            hello Head,{count}
        </div>
    )
}

function App(){
    const [count,setCount] = useState(0)
    const onRender = (id, phase, actualDuration, baseDuration, startTime, commitTime)=>{
        console.log(id, phase, actualDuration, baseDuration, startTime, commitTime)
    }
    return (
        <div>
            hello App
            <button onClick={()=>setCount(count + 1)}>点击</button>
            {count}
            <Profiler id="App" onRender={onRender}>
                <Head count={count}/>
            </Profiler>
        </div>
    )
}

export default App

hydrateRoot水合与服务端API

SSR(服务端渲染)技术,特别☞支持在Node.js中运行相同应用程序的前端框架(例如React、Vue等),将其渲染成HTML,最后在客户端进行水合处理,SSR有利于SEO搜索引擎优化

hydrateRoot – React 中文文档https://zh-hans.react.dev/reference/react-dom/client/hydrateRoot看文档写代码

CSS-in-JS允许直接在JS中编写CSS

这个解决方案给我们提供了新的编写CSS的方式,使用JS为基础的API来创建和编写样式

好处:动态样式,元素作用域,自定义主题,支持SSR,方便单元测试等。。。

CSS in JS library:Style-components、Linaria

使用前先安装:

npm install styled-components
import { useState } from 'react'
import styled from 'styled-components'

const Div = styled.div`
  width: 200px;
  height: 200px;
  display:${({ show }) => (show ? 'block' : 'none')};
  background: red;
  &p{
       color:white; 
  }
`
const Link = styled.a`
  text-decoration: underline;
  color: red;
  &:hover {
    color: yellow;
  }
`

function App() {
  const [show, setShow] = useState(false)
  return (
    <div>
      hello App
      <Div title="hello world" show={show} />
      <p>ppppppppp</p>
      <button onClick={() => setShow(prev => !prev)}>点击</button>
      <Link href="https://www.baidu.com">去百度</Link>
    </div>
  )
}
export default App

会反复横跳

React中使用Tailwind CSS

只用书写HTML代码,无需书写CSS,即可快速的构建美观的网站,Tailwind框架利用CSS原子化思想实现,优点:统一的风格,构建体积很小,具备响应式的一切,组件驱动等

比上一种常用一点,简单一点

使用之前需要配置一下:

https://tailwindcss.com/docs/installation/using-vite#react

有一些插件可以辅助我们写代码

1.提示Tailwind CSS IntelligentSense插件

2.@tailwind报错 -> 设置 -> unknown -> css line -> ignore

 npm install -D tailwindcss postcss autoprefixer

 

 

花花绿绿的全在报错(上面的试过了不好用):

 

 

一定要用吗

这个

 最终安装成功:

然后更改配置文件(tailwind.config.js):

/** @type {import('tailwindcss').Config} */
export default {
  content: [
    "./index.html",
    "./src/**/*.{js,ts,jsx,tsx}",
  ],
  theme: {
    extend: {},
  },
  plugins: [],
}

更改index.css:

@tailwind base;
@tailwind components;
@tailwind utilities;

tailwindcss.jsx:

export default function App(){
    return(
        <h1 className="text-3xl font-bold underline ">
            hello world!
        </h1>
    )
}

测试一下:

 这是测试效果:

export default function App(){
    return(
        <>
        <h1 className="text-3xl font-bold underline ">
            hello world!
        </h1>
        <div className="w-100 first-line:bg-slate-400">
            西安邮电你把大家都害死了
            西安邮电你把大家都害死了
            西安邮电你把大家都害死了
            西安邮电你把大家都害死了
            西安邮电你把大家都害死了
            西安邮电你把大家都害死了
            西安邮电你把大家都害死了
            西安邮电你把大家都害死了
            西安邮电你把大家都害死了
            西安邮电你把大家都害死了
            西安邮电你把大家都害死了
            西安邮电你把大家都害死了
            西安邮电你把大家都害死了
            西安邮电你把大家都害死了
            西安邮电你把大家都害死了
            西安邮电你把大家都害死了
            西安邮电你把大家都害死了
            西安邮电你把大家都害死了
            西安邮电你把大家都害死了
            西安邮电你把大家都害死了
            西安邮电你把大家都害死了
            西安邮电你把大家都害死了
            西安邮电你把大家都害死了
            西安邮电你把大家都害死了
            西安邮电你把大家都害死了
            西安邮电你把大家都害死了
            西安邮电你把大家都害死了
        </div>
        </>
    )
}

 

 react-spring动画库

使用自然流畅的动画,可以提高UI和交互,让应用栩栩如生

pmndrs/react-spring: ✌️ A spring physics based React animation libraryhttps://github.com/pmndrs/react-spring

 在Web中浏览可以使用这个:

npm install @react-spring/web
import { animated, useSpring } from '@react-spring/web'

const FadeIn = ({ isVisible, children }) => {
  const styles = useSpring({
    opacity: isVisible ? 1 : 0,
    y: isVisible ? 0 : 24,
  })

  return <animated.div style={styles}>{children}</animated.div>
}

function App(){
    return (
        <div>
            hello App
        </div>
    )
}
export default App

例子中举了个实现淡入淡出的效果的情况,是借助isVisible

import { animated, useSpring } from '@react-spring/web'
import { useState } from 'react'

const FadeIn = ({ isVisible, children }) => {
  const styles = useSpring({
    opacity: isVisible ? 1 : 0,
    y: isVisible ? 0 : 24,
  })

  return <animated.div style={styles}>{children}</animated.div>
}

function App(){
    const [isVisible,setIsVisible] = useState(true)
    return (
        <div>
            <button onClick={()=>setIsVisible(!isVisible)}>点击</button>
            <FadeIn isVisible={isVisible}>
                hello App
            </FadeIn>
        </div>
    )
}
export default App

Ant Design Charts图表库

简单好用的React图表库,像使用组件一样生成图表,开箱即用,甚至不需要修改任何的配置项就可以满足需求

图表库也有很多:

1. Ant Design Charts

2.Recharts

3.echart-for-react

...

Ant Design Charts | AntVhttps://ant-design-charts.antgroup.com/按照图表简模板例使用:

import { Bar } from '@ant-design/plots';
import React from 'react';
import ReactDOM from 'react-dom';

function App(){
    const data = [
        {
          labelName: '蓝领',
          value: 110,
        },
        {
          labelName: '白领',
          value: 220,
        },
        {
          labelName: '制造业蓝领',
          value: 330,
        },
        {
          labelName: '退休人员',
          value: 440,
        },
      ];
      
      const DemoBar = () => {
        const config = {
          data,
          xField: 'labelName',
          yField: 'value',
          paddingRight: 80,
          style: {
            maxWidth: 25,
          },
          markBackground: {
            label: {
              text: ({ originData }) => {
                return `${(originData.value / 1000) * 100}% | ${originData.value}`;
              },
              position: 'right',
              dx: 80,
              style: {
                fill: '#aaa',
                fillOpacity: 1,
                fontSize: 14,
              },
            },
            style: {
              fill: '#eee',
            },
          },
          scale: {
            y: {
              domain: [0, 1000],
            },
          },
          axis: {
            x: {
              tick: false,
              title: false,
            },
            y: {
              grid: false,
              tick: false,
              label: false,
              title: false,
            },
          },
          interaction: {
            elementHighlight: false,
          },
        };
        return <Bar {...config} />;
      };
      
      ReactDOM.render(<DemoBar />, document.getElementById('container'));
}

export default App

React-BMapGL地图库

在React中使用地图组件,并且渲染相关的功能

React-BMapGL文档https://lbsyun.baidu.com/solutions/reactBmapDoc使用需要在index.html模板页面头部加载百度地图JS API代码,密钥可以去百度开放平台官网申请

<script type="text/javascript" src="//api.map.baidu.com/api?type=webgl&v=1.0&ak=您的密钥"></script>

然后使用npm方式安装react组件库,然后通过es模块加载

npm install react-bmapgl --save
import { Map, Marker, NavigationControl, InfoWindow } from 'react-bmapgl'

function App() {
  return (
    <div>
      hello App
      <Map center={{ lng: 116.402544, lat: 39.928216 }} zoom="11">
        <Marker position={{ lng: 116.402544, lat: 39.928216 }} />
        <NavigationControl />
        <InfoWindow
          position={{ lng: 116.402544, lat: 39.928216 }}
          text="内容"
          title="标题"
        />
      </Map>
    </div>
  )
}

export default App

记得把严格模式取消,否则会容易出问题

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于 MetaGPT 自部署一个类似 MGX 的多智能体协作框架

MGX&#xff08;由 MetaGPT 团队开发的 mgx.dev&#xff09;是一个收费的多智能体编程平台&#xff0c;提供从需求分析到代码生成、测试和修复的全流程自动化功能。虽然 MGX 本身需要付费&#xff0c;但您可以通过免费服务和开源项目搭建一个类似的功能。以下是一个分步骤的实现…

主时钟与虚拟时钟约束

1、主时钟约束 1.1、主时钟约束语法&#xff1a; create_clock -name< clock_name > -period <period> -waveform{ <rise_time> <fall_time> } [get_ports< port_name >] 说明&#xff1a; name 之后的<clock_name> 是clk 的name&a…

CyberRT(apollo) 定时器模块简述及bug分析

timer 模块 timer的定义&#xff0c;cyberrt中timer模块用于设置定时器任务&#xff0c;字面意思&#xff0c;设置设置定时周期及出发频次&#xff08;周期 or oneshot)&#xff0c;到达指定时间时间触发callback time wheel 时钟节拍轮&#xff0c;常见的定时器设计&#x…

网络安全月度报告

&#x1f345; 点击文末小卡片 &#xff0c;免费获取网络安全全套资料&#xff0c;资料在手&#xff0c;涨薪更快 3.1.1网络安全现状及安全挑战 网络的出现给人们的工作和生活带来了极大的便利&#xff0c;但同时也带来了极大的安全风险。在信息传输和交换时&#xff0c;需要对…

nio多线程版本

多线程多路复用 多线程NIO&#xff0c;&#xff0c;就是多个线程&#xff0c;每个线程上都有一个Selector&#xff0c;&#xff0c;&#xff0c;比如说一个系统中一个线程用来接收请求&#xff0c;&#xff0c;剩余的线程用来读写数据&#xff0c;&#xff0c;每个线程独立干自…

一周学会Flask3 Python Web开发-Flask3之表单处理WTForms安装与定义WTForms表单类

锋哥原创的Flask3 Python Web开发 Flask3视频教程&#xff1a; 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 我们平时开发项目&#xff0c;都会用到表单&#xff0c;编写表单&#xff0c;提交表单&#xff0c;验证表单&#xff0c;如果…

基于NI USRP 硬件的下一代O-RAN研究测试台​

目录 基于NI SDR硬件的下一代O-RAN研究测试台​挑战&#xff1a;解决方案&#xff1a; 基于NI SDR硬件的下一代O-RAN研究测试台​ “OAIC提供了一个开放平台&#xff08;包括软件架构、库和工具集&#xff09;&#xff0c;用于对基于AI的无线接入网(RAN)控制器进行原型开发和测…

【开源-鸿蒙土拨鼠大理石系统】鸿蒙 HarmonyOS Next App+微信小程序+云平台

✨本人自己开发的开源项目&#xff1a;土拨鼠充电系统 ✨踩坑不易&#xff0c;还希望各位大佬支持一下&#xff0c;在GitHub给我点个 Start ⭐⭐&#x1f44d;&#x1f44d; ✍GitHub开源项目地址&#x1f449;&#xff1a;https://github.com/cheinlu/HarmonyOS-groundhog-mar…

笔记本电脑本地部署ollama大模型(显存不足调用CUDA Unified Memory方法)

软硬件&#xff1a;win11,NVIDIA GeForce RTX 3050 显存4g 一.ollama模型最低要求 1. Llama 3.1 (8B) 模型 GPU: 至少需要 1 张具有 16 GB 显存的 GPU&#xff08;例如 NVIDIA Tesla V100 或 A100&#xff09;。CPU: 高性能的多核处理器&#xff08;例如 Intel Xeon 或 AMD …

【Rancher】简化Kubernetes容器管理与部署的开源平台

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Kubernetes航线图&#xff1a;从船长到K8s掌舵者》 &#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、什么是Rancher 2、Rancher诞生里程 …

vscode通过ssh远程连接(linux系统)不能跳转问题

1.问题描述 unbantu中的vscode能够通过函数跳转到函数定义&#xff0c;而windows通过ssh连接unbantu的vscode却无法跳转 2.原因&#xff1a; 主要原因是这里缺少插件&#xff0c;这里是unbantu给主机的服务器&#xff0c;与ubantu本地vscode插件相互独立&#xff0c;能否跳转…

思维链 Chain-of-Thought Prompting

论文: Chain-of-Thought Prompting Elicits Reasoning in Large Language Models (Wei et al., 2022) 核心贡献: 首次提出通过显式的中间推理步骤&#xff08;即思维链&#xff09;提升大语言模型的复杂推理能力。该方法通过示例展示多步推理过程&#xff0c;引导模型生成逻辑…

计算机毕业设计SpringBoot+Vue.js体育馆管理系统(源码+文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

MySQL笔记---Ubuntu环境下从零开始的MySQL

1. 安装MySQL 1.1 自动安装&#xff08;固定版本&#xff09; 更新软件包列表&#xff1a;在终端中执行以下命令&#xff0c;以更新系统的软件包列表&#xff1a; sudo apt update安装MySQL服务器&#xff1a;运行以下命令安装MySQL服务器&#xff1a; sudo apt install mysql…

【六祎 - Note】SQL备忘录;DDL,DML,DQL,DCL

SQL备忘录 from to : 点击访问源地址

简易的微信聊天网页版【项目测试报告】

文章目录 一、项目背景二、项目简介登录功能好友列表页面好友会话页面 三、测试工具和环境四、测试计划测试用例部分人工手动测试截图web自动化测试测试用例代码框架配置内容代码文件&#xff08;Utils.py&#xff09;登录页面代码文件&#xff08;WeChatLogin.py&#xff09;好…

FinRobot:一个使用大型语言模型进行金融分析的开源AI代理平台

文章目录 前言一、生态系统1. 金融AI代理&#xff08;Financial AI Agents&#xff09;2. 金融大型语言模型&#xff08;Financial LLMs&#xff09;3. LLMOps4. 数据操作&#xff08;DataOps&#xff09;5. 多源LLM基础模型&#xff08;Multi-Source LLM Foundation Models&am…

【软考-架构】1.3、磁盘-输入输出技术-总线

GitHub地址&#xff1a;https://github.com/tyronczt/system_architect ✨资料&文章更新✨ 文章目录 存储系统&#x1f4af;考试真题输入输出技术&#x1f4af;考试真题第一题第二题 存储系统 寻道时间是指磁头移动到磁道所需的时间&#xff1b; 等待时间为等待读写的扇区…

USRP4120-通用软件无线电平台

1、产品描述 USRP4120平台是彬鸿科技公司推出的以XILINX XC7Z020 SOC处理器为核心&#xff0c;搭配ADI AD9361射频集成芯片&#xff0c;针对无线通信系统科研与教学实验场景的一款通用软件无线电平台。产品频率范围70MHz~6GHz&#xff0c;模拟带宽200KHz~56MHz&#xff0c;支持…

MAVEN的安装和配置指南【超详细】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、安装Maven1.下载适合自己的版本2.配置环境变量3.验证环境变量是否配置成功 二、MAVEN的配置1.配置本地仓库2.配置镜像仓库3.创建一个简单的Maven项目 总结 …