React---学习小笔记

发布于:2025-06-23 ⋅ 阅读:(19) ⋅ 点赞:(0)

目录

JSX的使用和原理


JSX

JSX的使用和原理

JSX(JS的语法扩展)的三个规则

1.必须有一个根结点

2.所以标签必须闭合

3.标签属性名称是驼峰命名法

import {createRoot} form 'react-dom/client'

const root = createRoot(document.querySelector('#root'))

root.render(
    <div>
    <h1> Hello JSX </h1>
    <img 
         className = "avatar"
         src="---"
         alt="头像"
   />
    </div>
)

JSX本质是一个JS对象 主要:{type,props}

JSX中{}的应用

作用:让JSX变为动态的,可以在标签内容,属性中

列表渲染(使用map方法/列表项添加key 值唯一) 条件渲染 样式渲染

//事件绑定

<div className = "box" onClick={ ( ) =>{...} }/>

//事件对象

<a href = "---" onClick = { e => {e,preventDefault() ---}}></a>

React 组件

注意:组件名称 首字母需要大写

就是一个JavaScript函数 函数中可以添加JSX标记

//创建组件:

const App = () => {

   return <div>React Component</div>

}

//渲染组件

root,render(<App/>)

组件的状态

修改状态的规则 

规则:不要直接修改当前状态的值,应创建新值

//count += 1
//setCount(count)

setCount(count+1)
//错误示例 数字添加
//list.push('123')
//setList(list)

//数组删除 list.fliter()


setList([...list,'123'])

//数组修改

setlist(
    list.map(item => {
        if(item === '---'){
              return ---
        }
        return item
   })
    

定义组件

function Button(){
 //业务/组件逻辑
    return <button>hello</button>
}


function App (){

return (

      <div className = "App">
       //自闭和 渲染组件
        </Button>
       //成对标签
        <Button> </Button>
      </div>
    )

}

useState是一个React Hook (函数)

它允许向组件添加一个状态变量 从而控制影响组件的渲染效果

状态不可变 在react中始终是替换它而不是修改它 否则不能引发视图更新

本质:数据驱动视图

const [count,setCount]  = useState(0)

Classnames类名  一个库

方便类名控制 key 对应 类目 value对应条件 满足条件显示类等

受控表单绑定

概念:使用React组件的状态useState控制表单的状态

   React                              state绑定input的value属性                                 Input

(State)                     把input最新的value值设置给state                        (Value)

const [value,setValue] = useState('')

<input 
    text = "text"
    value = {value}
    onChange = {(e) => setValue(e) }
/> 
    

组件通信

父传子

子传父

兄弟组件

跨层传递数据

1.使用createContext方法创建一个上下文对象Ctx

2.在顶层组件(App)中通过Ctx.Provider组件提供数据

3.在底层组件(B)中通过useContext钩子函数获取消费数据

useEffect

依赖项 副作用函数执行时机
没有依赖性 组件初始渲染+组件更新时执行
空数组依赖 只在初始渲染时执行一次
添加特定依赖项 组件初始渲染+特定依赖项变化时执行
function App(){
    const  [count,setCount] = useState(0)
    useEffect(() => {
    console.log("副作用函数执行!")
    },[count]) //若无依赖项 则全局组件任一更新都触发
}

组件卸载

  

function Son(){
    useEffect(()=>{
    const timer = setInterval(()=>{   
    console.log("123")
    },1000)

    return () => {
    clearInterval(timer)
        }    
    },[])
    return <div>this is son </div>
}

function App(){
    const [show,setShow] = useState(true)
    return (
    <div>    
    {show&&<Son/>}
    <button onClick={() =>setShow(flase)}>卸载So组件</button>
    </div>
 )
}
export default App

注意:对象不是应该react child /结点 不能直接渲染 

使用sass时 需要手动安装sass包 npm i sass 

对于本地图片的导入 需要导入

import avatar from '文件路径'


Hook

hook的概念:

Hook(钩子)是一种编程机制,允许开发者在特定事件发生时插入自定义代码或逻辑‌,广泛应用于操作系统(如Windows消息处理)和软件开发中,用于拦截、监视或修改系统或应用程序的行为。‌‌        

Hook的核心概念

Hook的核心功能是‌拦截并处理特定事件或消息‌。其名称源自“钩子”的物理特性——像钩子一样“抓住”事件或数据流,并在传递过程中插入自定义逻辑。主要分为两类:

  1. 系统级Hook‌:监视整个系统的消息(如键盘、鼠标事件),需通过动态链接库(DLL)实现。‌‌1‌

  2. 线程级Hook‌:仅针对特定线程的消息,作用范围更小。‌‌

技术原理与实现

  • 消息拦截机制‌:Hook通过维护钩子链表,将自定义回调函数挂载到系统消息处理流程中。消息到达目标前,会优先触发钩子函数。‌‌

  • 执行顺序‌:后安装的钩子优先执行,支持链式传递或终止消息。‌‌

  • 开发语言‌:传统上使用C/C++(如Windows API),但现代语言(如Python、Java)也可实现类似功能,但通常限于应用层。‌‌

应用场景

  1. 系统监控‌:截获键盘输入、鼠标动作(如屏幕取词)。‌‌

  2. 功能扩展‌:在不修改源码的情况下注入逻辑(如埋点统计、AOP编程)。‌‌

  3. 安全防护‌:检测恶意行为(如键盘记录器)。‌‌

自定义Hook函数

概念:自定义Hook是以use打头的函数,通过自定义Hook函数可以用来实现逻辑的封装和复用

封装自定义Hook通用思路

1.声明一个以use打头的函数

2.在函数体内封装可复用的逻辑

3.把组件用到的状态或者回调return 出去(以对象或数组)

4.在哪个组件中要用到这个逻辑,就执行这个函数,解构出来的状态和回调进行使用

使用规则:

只能在组件中或者其它自定义Hook函数中调用

只能在组件的顶层调用,不能嵌套在if,for,其它函数中


Redux

步骤:

  1. 定义一个reducer函数(根据当前想要做的修改返回一个新状态)
  2. 使用createStore方法传入reducer函数,生成一个store实例对象
  3. 使用store实例的susscirbe方法订阅数据变化(数据变化,得到通知)
  4. 使用store实例的dispatch方法提交action对象触发数据变化(告诉reducer怎么改数据)
  5. 使用store实例的getState方法获取最新的状态数据更新到视图中

核心管理数据流程

  • state:一个对象 存放我们管理的数据状态
  • action:一个对象 描述修改内容
  • reducer:一个函数 根据action生成新状态

网站公告

今日签到

点亮在社区的每一天
去签到