首页 > 编程语言 >React 面向组件编程 之 函数式组件

React 面向组件编程 之 函数式组件

时间:2022-09-21 10:13:48浏览次数:70  
标签:useRef const 函数 编程 React inputEl 组件

简单组件 和 复杂组件 的概念

如果组件有state(状态)属性,就是复杂组件

如果没有state(状态)属性,就是简单组件

state、props、refs是组件实例的三大核心属性,在之后会逐一进行详细地讲述,不了解者可以先跳过,之后再来回看下述内容。


函数式组件

function App() {
    return <h1>我是一个函数式组件</h1>
}

以上App函数式组件符合简单组件的定义,因为它没有state。

创建函数式组件,首字母必须大写,必须要有返回值。


函数式组件使用props

在React16.8.0版本之前,函数式组件只能使用三大组件中的props,其他两个属性都使用不了。

因此在16.8.0版本之前函数式组件注定只能是简单组件,应用远不如类式组件。

function App(props) {

    const { name, sex, age } = props;
    
    return <h1>我的名字叫做{name}, 性别{sex}, 今年{age}岁</h1>
}

// 将App组件标签渲染到index页面的div上
ReactDOM.createRoot(document.getElementById('root')).render(<App name="cxk" sex="女" age="18" />);

函数式组件中使用state

在16.8.0版本,React推出了新特性/新语法:Hook。

可以让你在函数组件中使用state以及其他的React特性,改变了函数组件拉胯的地位。

使用其中的 State Hook 可以让函数组件使用state。

useState:

import React, { useState } from "react";

export default function App() {

    const [count, setCount] = useState(0);

    return (
        <>
            <h1>点击了{count}次</h1>
            <button onClick={ () => setCount(count + 1) }>+1</button>
        </>
    )
}
  • 语法:
    • const [xxx, setXxx] = React.useState(initValue);// initValue是xxx的初始值,setXxxx是用来设置xxx值的函数
  • useState()说明:
    • 参数:第一次初始化的值
    • 返回值:第一个是内部当前的状态值,第二个是更新这个状态值的函数
  • setXxx()的2种写法:
    • setXxx(newValue):参数为非函数值,直接指定新的状态值,覆盖旧的状态值
    • setXxx(value => newValue):参数为函数,可以接收到原本的旧的状态值作为参数,函数的返回值newValue会覆盖旧的状态值

函数式组件中使用refs

使用其中的 Ref Hook 可以让函数组件使用refs。

useRef:

import React, { useRef } from "react";

export default function App() {

    const inputEl = useRef(null);

    const onButtonClick = () => {
        console.log(inputEl.current);
        inputEl.current.focus();
    }

    return (
        <>
            <input ref={inputEl} type="text" />

            <button onClick={onButtonClick}>Focus the input</button>
        </>
    )
}
  • 语法:
    • const inputEl = useRef(initialValue) // useRef返回一个可变的ref对象,对象的current属性初始化为initialValue

如果input不是个普通的dom元素,而是个组件,该怎么办呢?

使用forwardRef将input封装成一个组件TextInput。

import React, { useRef, forwardRef} from "react";

const TextInput =  forwardRef((props, ref) => {
    return <input ref={ref} type="text"></input>
});

export default function App() {

    const inputEl = useRef(null);

    const onButtonClick = () => {
        console.log(inputEl.current);
        inputEl.current.focus();
    }

    return (
        <>
            <TextInput ref={inputEl}></TextInput>

            <button onClick={onButtonClick}>Focus the input</button>
        </>
    )
}

标签:useRef,const,函数,编程,React,inputEl,组件
From: https://www.cnblogs.com/luckest/p/16714611.html

相关文章

  • 即用型UI组件Kendo UI,助力惠普缩短40%的应用开发时长
    惠普解决方案架构师BenjaminThatcher:"我们HP有自己的设备策略,内部使用的应用程序需要支持几乎所有主要的移动操作系统,包括WindowsPhone、Android、iOS系统及这些平台的......
  • 小程序自定义组件
    1.创建自定义组件一个组件也类似于一个页面,由json wxml wxss js 4个文件组成可以在一个新文件夹上右键新建component,可以直接生成这四个文件其次在json配置文件中......
  • 来看界面组件DevExpress WinForm是如何实现地图搜索的
    DevExpressWinForm拥有180+组件和UI库,能为WindowsForms平台创建具有影响力的业务解决方案。DevExpressWinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office......
  • vue多图片上传组件
         <template><!--上传控件用法:<upload-widgetv-model="imgUrl"></upload-widget>--><divclass="clearfix"><a-upload......
  • 编程逻辑
    大部分高级编程语言虽然语法不同,编译器不同,学习它们的小哥哥小姐姐们不同,但有一点却是出奇地一致:编程逻辑!有些刚入行或刚入门的童鞋可能连编程是啥意思都没弄懂,一下子又来......
  • C++05_模板元编程
    模板函数为什么需要模板函数(template)避免重复写代码inttwice(inti){returni*2;}floattwice(floatf){returnf*2;}doubletwice(doubled)......
  • C++06_函数式编程
    函数也是对象函数可以作为另一个函数的参数:#include<cstdio>template<classFunc>voidcall_wait(Funcfunc){func(0);func(1);}intmain(){au......
  • Java无难事:详解Java编程核心思想与技术 pdf
    高清扫描版下载链接:https://pan.baidu.com/s/1Ht352zrCXy9ArE-Th9fgNg点击这里获取提取码 ......
  • 根据键盘输入的三角形三边长度,利用海伦公式编程三角形面积
    提示:三角形三边(a,b,c)用海伦公式求面积公式如下:L=(a+b+c)/2面积area=(L(L-a)(L-b)(L-c))**0.5 样例输入345 样例输出6.0 样例输入6810 样例......
  • Vue3:注册组件
    注册组件组件内部<script>importBox1from"./Box1.vue"exportdefult{components:{Box1},setup(){}}</scr......