首页 > 其他分享 >Hook代替类组件(hook+函数组件)

Hook代替类组件(hook+函数组件)

时间:2022-11-17 21:55:52浏览次数:40  
标签:count return hook Hook useState 组件

Hook是React 16.8的新增特性,它可以在不编写类组件的情况下使用state以及其他React特性

Hook和函数组件:
React的函数组件处理是这样的
const Demo = (props)=>{
    // 可以在这使用 Hook
     ...
    return <div>Hook</div>
}

也可以这样写:
function Demo(props){
   // 可以在这里使用Hook
   return <div>Hook</div>
}

hook:(钩子,钩入)
hook + 函数组件 === 类组件

提倡函数式的编程方式

hook可以在函数内部返回前进行定义:
function Hook(){
   hook定义
   return <div>hook</div>
}

hook可以完全取代class

使用hook:
import React,{useState} from "react"

export default function Search(){

    //使用hook:
    const [count,setCount] = useState()
    return (
       <div>
         <h1>搜索</h1>
       </div>
    )
}

useState():
是一个函数
useState(1):
在里面传了一个1为初始化的值


函数组件写法:
导入hook:
import React,{useState} from "react"
export default function Hook(){
   //使用hook :{useState}
    const [count,setCount] = useState(1)
   return (
        <div>hook</div>
        <h1>{count}</h1>
        <button onClick={()=>{setCount(count+1)}}>Click</button>
   )
}
写法二:
import React,{useState} from "react"
export default function Hook(){
   //使用hook :{useState}
    const [count,setCount] = useState(1)
    //函数存储处理:
    function Add(){
     setCount(count+1)
    }
   return (
        <div>hook</div>
        <h1>{count}</h1>
        <button onClick={()=>{Add}}>Click</button>
   )
}

相当于:
类组件写法:
 export default class Hook extends Component{
      //状态 
      constructor(){
             super()
            //状态:
             this.state={
                count:1
              }
          }
      //渲染:
      render(){
         return(
            <div>
                <h1>class<h1>
                  <h1>this.state.count<h1>
                  <button onClick={({setState})=>{this.setState.count + 1}}></button>
             </div>
          )
       }
}


需求:我们初始化不是数值,而是数组或者数组对象,该怎么处理呢?
hook写法:
//hook的定义:
数据对象:
const [list,setList] = useState([{title:'标题1'},{title:'标题2'},{title:'标题3'}])

//函数存储处理:
    function Add(){
      let lis = {title:"标题4"}
      //es6数组对象添加对象的方式:
      setList([...list,lis])
    }

渲染:
//hook的渲染:
return(
   <div>
      <button onClick={()=>{Add}}>Click</button>//点击就可以实现数据追加
      <ul>
         {
           list.map((v,i)=>{
            return  <li key={i}>{v.title}</li>
         })
      </ul>
   </div>
)

let arr1 = [1,2,3]
let arr2 = [4,5,6]
let arr3 = [...arr1,...arr2] //es6扩展运算符(对数组对象序列进行处理)

标签:count,return,hook,Hook,useState,组件
From: https://www.cnblogs.com/strundent/p/16901118.html

相关文章

  • 自定义开发限流组件 之 场景需求分析
    限流,通常讲就是限制流量,也有很多其他的说法,比如:限频、疲劳度控制等。原文链接:自定义开发限流组件之场景需求分析-一只小Coder最近遇到一个需求,系统A作为一个专门推送......
  • Vue组件之间的通信方式
     父→子子→父 props✖✔查看详情自定义事件 ✖✔ 方式三   ......
  • 类组件的使用
    exportdefaultclassAppextendsComponent{//状态:constructor(){super()//父级构造函数调用this.state={title:'zhaoxi......
  • 从组件化角度聊聊设计工程化
    近几年围绕业务中台化的场景,涌现出了许多低代码平台。面对多组件、多页面、跨平台的复杂场景,如何保证整体的用户体验一致性,减少用户认知和负担,提升用户使用效率,便成为业务......
  • 几种常见的React Hooks
    useStateuseState,让函数组件拥有了维持状态的功能。维持状态是指在函数的多次渲染之间,这个state是可以在函数中间共享的使用方式importReact,{useState}from'reac......
  • style标签上添加scoped后父组件影响了子组件样式
    style标签上添加scoped之后,只会作用于当前组件,组件之间样式不相互影响,父子组件之间也不影响,但子组件根元素样式会受到父组件样式影响;解决VueLoader里面有一句使用scop......
  • ReactNote-函数组件和类组件
    组件:可以编写react元素虚拟DOM:react元素真实的DOM:可以展示React里很重要的:组件组件目的:复用组件作用:代码分隔组件在React里有两种定义的方式:第一种:......
  • 8.django-message组件
    message组件可以某次请求的某些数据暂存起来,当后面请求需要的时候可以再次使用,同时删除这些存起来的数据相对于cookie,message将数据存在server端,在需要使用的时候,再将数......
  • vue 使用ant design vue组件实现表格操作
    vue使用antdesignvue组件实现点击表格数据弹窗写在columns数组的对象里面customRender:(text,record,index)=>{if(index===this.list.length-1)......
  • ACV1引擎寻找ScriptHook地址
    ACV1引擎寻找ScriptHook地址0x00前言为了实现不封包即对游戏的脚本文件进行修改此处需要Hook相关位点Hook功能已经在ACV1FileHook中实现但是需要寻找两个地址第一个......