首页 > 其他分享 >react hook

react hook

时间:2023-09-14 11:26:30浏览次数:36  
标签:React const render react hook props 组件 return

当我们想在两个函数之间共享逻辑时,我们会把它提取到第三个函数中。 必须以“use”开头吗?必须如此。这个约定非常重要。不遵循的话,由于无法判断某个函数是否包含对其内部 Hook 的调用,React 将无法自动检查你的 Hook 是否违反了 Hook 的规则 小练习   使用自定义hooks实现鼠标移动位置

import React, { useState, useEffect } from "react"
import icon from "../../assect/icon.png"
const usePosition = () => {
 const [mousePosition, setMousePosition] = useState({ x: 0, y: 0 })
 const MouseMove = (e) => {
  setMousePosition({ x: e.pageX, y: e.pageY })
 }
 useEffect(() => {
  window.addEventListener('mousemove', MouseMove)
  return (window.addEventListener('mousemove', MouseMove))
 }, [])
 return mousePosition
}
const Assembly1 = () => {
 const { x, y } = usePosition()
 return (
  <div>{x}{y}</div>
 )
}
const Assembly = () => {
 const { x, y } = usePosition()
 return (
  <div>
   位置{x}---{y}
   <img src={icon} width={'50px'} height={'50px'} style={{ position: "absolute", top: y, left: x }} />
  </div>
 )
}
export default Assembly
高阶组件     高阶组件简称(HOC)是 React 中用于复用组件逻辑的一种高级技巧。HOC 自身不是 React API 的一部分,它是一种基于 React 的组合特性而形成的设计模式。     高阶组件是参数为组件,返回值为新组件的函数 小练习   使用高阶组件实现鼠标移动位置
import React from "react"
import icon from "../../assect/icon.png"
function withHOC(Section) {//高阶组件
  return class extends React.Component {
  state = {
   x: 0, y: 0
  }
  mouseChange = (e) => {//鼠标事件
   const { pageX, pageY } = e
   this.setState({
    x: pageX,
    y: pageY
   })
  }
  componentDidMount=()=>{
   window.addEventListener("mousemove", this.mouseChange)
  }
  componentWillUnmount = () => {
   window.addEventListener("mousemove", this.mouseChange)
  }
  render() {
   return (
    <div>
       <Section {...this.state}></Section>
    </div>
   )
  }
 }
}
const ClassSection=(props)=>{//
const {x,y}=props
return (
 <div>{x}{y}</div>
)
}
const Section = (props)=>{//鼠标移动图片随之移动
 const {x,y}=props
 return (
  <div>
   {x},{y}
   <img src={icon} width={'50px'} height={'50px'} style={{position:'absolute',top:y,left:x}} />
  </div>
 )
}
const ExportComponents = withHOC(Section)
export default ExportComponents

render props组件

 “render prop” 是指一种在 React 组件之间使用一个值为函数的 prop 共享代码的简单技术    具有 render prop 的组件接收一个返回 React 元素的函数,并在组件内部通过调用此函数来实现自己的渲染逻辑。 小练习   使用render props组件实现鼠标移动位置
import React from "react";
import icon from "../../assect/icon.png"
class Event extends React.Component {
 state = {
  x: 0,
  y: 0
 }
 event = (e) => {
  this.setState({
   x: e.pageX,
   y: e.pageY
  })
 }
 componentDidMount = () => {
  window.addEventListener("mousemove", this.event)
 }
 componentWillUnmount = () => {
  window.addEventListener("mousemove", this.event)
 }
 render() {
  return (
   <div>{this.props.custom(this.state)}</div>
  )
 }
}
const accept = () => {
 return (
  <Event custom={({ x, y }) => (
   <div>
    <p>{x},{y}</p>
    <img src={icon} width={'50px'} height={'50px'} style={{ position: 'absolute', top: y, left: x }} />
   </div>
  )}></Event>
 )
}
export default accept

总结:

React自定义hooks、高阶组件和render prop都是用于实现代码复用的方式,它们各有不同的特点和适用场景。自定义hooks适用于封装可复用的逻辑,高阶组件适用于增强原始组件的功能,而render prop则提供了一种灵活的方式来共享逻辑。选择使用哪种方式取决于具体的需求和场景。

标签:React,const,render,react,hook,props,组件,return
From: https://www.cnblogs.com/xinyuxiangwang/p/17702033.html

相关文章

  • react配置css相关
    1.installnormalize:yarnaddnormalize.css-D(1).引入src/index.js或src/index.tsx:import"normalize.css";2.installsass:[email protected].配置less:(1).安装less相关依赖:[email protected]@5.0.0-D(2).修改config/webpack.config.js文件:......
  • react配置eslint、prettier和commitlint规范工程
    1.配置prettier:(1).installPrettierlocally:yarnadd--dev--exactprettierThen,createanemptyconfigfiletoleteditorsandothertoolingknowyouareusingPrettier:echo{}>.prettierrc.jsonNext,createa.prettierignorefiletoletthePrettierC......
  • OpenTiny Vue组件库实现跨框架(vue2、vue3、react、solid)
    本文由TinyVue组件库核心成员郑志超分享,首先分享了实现跨框架组件库的必要性,同时通过演示demo和实际操作向我们介绍了如何实现一个跨框架的组件库。前言前端组件库跨框架是什么?前端组件库跨框架是指在不同的前端框架(如React、Vue、Solid等)之间共享和复用组件的能力。这种能力可以让......
  • React框架下如何集成H.265网页流媒体EasyPlayer.js视频播放器?
    H5无插件流媒体播放器EasyPlayer属于一款高效、精炼、稳定且免费的流媒体播放器,可支持多种流媒体协议播放,可支持H.264与H.265编码格式,性能稳定、播放流畅,能支持WebSocket-FLV、HTTP-FLV,HLS(m3u8)、WebRTC等格式的视频流。在功能上,EasyPlayer支持直播、点播、录像、快照截图、MP4播放......
  • react native项目安装需求
    1.创建RN项目2.安装路由依赖3.redux需求安装redux依赖4.第三方组件库5.打包及各种其他操作 安装指定依赖注意:**link**链接库已在RN(reactnative)0.60版本开始支持自动链接,不需要再手动link!!! ###2.安装路由依赖#####安装所需包npminstall@react-navigation/native##......
  • ShutdownHook妙用
    上期文章分享了ShutdownHook的API和基本使用,但是少了一些实际工作中的案例,总感觉没啥大用一样。最近总结工作中可以用到ShutdownHook来解决一些实际问题的例子,分享给大家。任务统计FunTester测试框架定义了好几个自定义的异步关键字,例如fun、funny、funner等。一旦使用到异步,肯......
  • react18-webchat网页聊天实例|React Hooks+Arco Design仿微信桌面端
    React18Hooks+Arco-Design+Zustand仿微信客户端聊天ReactWebchat。react18-webchat基于react18+vite4.x+arco-design+zustand等技术开发的一款仿制微信网页版聊天实战项目。实现发送带有emoj消息文本、图片/视频预览、红包/朋友圈、局部模块化刷新/美化滚动条等功能。使用技术......
  • HookWinInet库实现类似fiddler的替换url
    fiddler正常情况下只能捕获WinInet库的请求,所以,只要浏览器设置代理服务器为fiddler,且fiddler可以正常抓包,就可以推测这些请求所使用的网络库是WinInet库。本文想要通过hook的方式实现类似于fiddler的替换响应,也就是替换一个url链接,访问的时候,响应变成了另外一个服务器发出来的。......
  • 超全面详细一条龙教程!从零搭建React项目全家桶(上篇)
    超全面详细一条龙教程!从零搭建React项目全家桶(上篇)兔子先生 ​关注他 101人赞同了该文章 React是近几年来前端项目开发非常火的一个框架,其背景是Facebook团队的技术支持,市场占有率也很高。很多初学者纠结一开始是学react还是vue。个人觉得,有时间的......
  • 从0到1搭建一个react项目
    从0到1搭建一个react项目react分享高级前端工程师​关注他  首先新建一个文件夹,然后用编辑器vscode打开这个文件夹打开文件夹后执行npminit命令,会提示你生成package.json文件然后下载npm包,下面贴下package.json{"name":"demo","versi......