当前位置: 首页 > article >正文

React中Hooks使用

自定义hooks

import React from 'react'
import {useWindowSize} from './hooks'
const Parent = (props) => {
	const [width,height] = useWindowSize()
	return (
		<div>
			size: {width}*{height}
		</div>
	)
}
function App(){
	return (
		<div className='App'>
			<Parent/>
		</div>
	)
}

import {useEffect,useState} from 'react'
export const useWindowSize = ()=>{
	const [width,setWidth] = useState('0px');
	const [height,setHeight] = useState('0px');
	useEffect(()=>{
		setWidth(document.documentElement.clientWidth+'px');
		setHeidth(document.documentElement.clientHeight+'px');
	},[])
	
	useEffect(()=>{
		const handleResize=()=>{
			setWidth(document.documentElement.clientWidth+'px');
			setHeidth(document.documentElement.clientHeight+'px');
		}
		window.addEventListener('resize',handleResize,false)
		return ()=>{
			window.removeEventListener('resize',handleResize,false)
		}
	},[])
	return [width,height]
}


useReducer实现,useState的实现是基于useReducer

import React,{useReducer} from 'react'
const reducer = (state,action)=>{
	switch(action.type){
		case 'ADD'
			return state+1;
		case 'SUB'
			return state-1;
		default:
			return state
	}
}
const Child=()=>{
	const [count,dispatch] = useReducer(reducer,10);
	return (
		<div>
			child: count: {count}
			<button onClick={()=>dispatch({type:'ADD'})}>+1</button>
			<button onClick={()=>dispatch({type:'SUB'})}>-1</button>
		</div>
	)
}
const Parent=()=>{
	return <div>parent:<Child/></div>
}
function App(){
	return (
		<div className='App'>
			<Parent/>
		</div>
	)
}

useReducer和useContext一起使用

import React,{useReducer,useContext} from 'react'
const Ctx = React.createContext(null)
const reducer = (state,action)=>{
	switch(action.type){
		case 'ADD'
			return state+1;
		case 'SUB'
			return state-1;
		default:
			return state
	}
}
const Child=()=>{
	const [count,dispatch] = useContext(Ctx);
	return (
		<div>
			child: count: {count}
			<button onClick={()=>dispatch({type:'ADD'})}>+1</button>
			<button onClick={()=>dispatch({type:'SUB'})}>-1</button>
		</div>
	)
}
const Parent=()=>{
	return (
		<div>
			parent:{count}
			<Child/>
		</div>
	)
}
function App(){
	const [count,dispatch] = useReducer(reducer,20)
	return (
		<Ctx.Provider value ={[count,dispatch]}>
			<div className='App'>
				<Parent/>
			</div>
		</Ctx.Provider>
	)
}


http://www.kler.cn/a/330442.html

相关文章:

  • Element-plus、Element-ui之Tree 树形控件回显Bug问题。
  • Android 网络层相关介绍
  • 【2024年华为OD机试】 (A卷,100分)- 租车骑绿岛(Java JS PythonC/C++)
  • MATLAB计算与建模常见函数:4.插值
  • k8s搭建双主的mysql8集群---无坑
  • 猫猫cpu的缓存
  • 使用 Node.js 创建一个 WebSocket 服务器
  • 如何使用工具删除 iPhone 上的图片背景
  • 文心一言 VS 讯飞星火 VS chatgpt (359)-- 算法导论24.3 1题
  • 本地运行LLama 3.2的三种方法
  • 多旋翼无人机“仿鸟类”精确拦截飞行目标,助力低空安全
  • 微信小程序技术框架选型
  • 在java后端发送HTTPClient请求
  • 用CSS创造三角形案例
  • 数据结构:c++ (OJ202) 快乐数
  • 实用SQL小总结
  • 基于ESP8266—AT指令连接阿里云+MQTT透传数据(2)
  • 828华为云征文|WordPress部署
  • ①EtherCAT转Modbus485RTU网关多路同步高速采集无需编程串口服务器
  • 高德地图key
  • 如果您忘记了 Apple ID 和密码,按照指南可重新进入您的设备
  • 深入解析 Vert.x 的关键特性、架构及其在异步编程中的应用
  • 基于深度学习的不遗忘训练