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

❤React-React 组件基础(类组件)

❤React-React 组件基础

1、组件化开发介绍

组件化开发思想:分而治之

React的组件按照不同的方式可以分成类组件:

划分方式一(按照组件的定义方式)

函数组件(Functional Component )和类组件(Class Component);

划分方式二(按照据组件内部是否有状态需要维护)

无状态组件(Stateless Component )和有状态组件(Stateful Component)

划分方式三(按照据组件的不同职责)

展示型组件(Presentational Component)和容器型组件(Container Component)

函数式组件是官方推荐的,也是接下来我们主要应该学的重点

异步组件-高阶组件

组件包含: React 组件介绍 React 组件的两种创建方式 React 事件处理有状态组件和无状态组件组件中的 state 和 setState()事件绑定 this 指向表单处理

组件特点 可复用、独立、可组合

2、组件化创建的两种方式

(1)函数创建组件---无状态组件 使用JS函数(或者箭头函数)创建的组件 名称以大写字母开头 函数必须有返回值,表示该组件的结构 渲染函数组件:用函数名作为组件标签名 可以是单标签或者双标签

(2)class创建组件---有状态组件

类组件:使用 ES6 的 class 创建的组件
  • 约定1:类名称也必须以大写字母开头
  • 约定2:类组件应该继承 React.Component 父类,从而可以使用父类中提供的方法或属性
  • 约定3:类组件必须提供render0) 方法
  • 约定4:render0)方法必须有返回值,表示该组件的结构

简单编写一个我们的类组件如下

js

 代码解读
复制代码import React from 'react'

class Header extends React.Component {
  render() {
    return (
      <div>header</div>
    )
  }
}

class Content extends React.Component {
  render() {
    return (
      <div>content</div>
    )
  }
}

export default class App extends React.Component {
  render() {
    // return (
    //   createElement(
    //     Fragment,
    //     null,
    //     createElement(
    //       Header
    //     ),
    //     createElement(
    //       Content
    //     )
    //   )
    // )
    return (
      <>
        <Header></Header>
        <Content></Content>
      </>
    )
  }
}

(3) 抽离为JS文件 将我们之前的部分进行抽离出来

js

 代码解读
复制代码import React from 'react'
class Header extends React.Component {
    render() {
      return (
        <div>header</div>
      )
    }
  }
export default Header;

导入和渲染使用即可

js

 代码解读
复制代码import Header from "./header";
<Header></Header>

3、组件事件处理

1 事件绑定

React 事件绑定语法与 DOM 事件语法相似 语法:on+事件名称={事件处理程序},比如:onClick={0)=>{}注意:React 事件采用驼峰命名法,比如:onMouseEnter、onFocus 在函数组件中绑定事件

类组件的方式写法:

函数式组件的方式写法

2事件对象

解释:可以通过事件处理程序的参数获取到事件对象React中的事件对象叫做:合成事件(对象)合成事件:兼容所有浏览器,无需担心跨浏览器兼容性问题

写法如下:

3 有状态组件(类组件)和无状态组件(函数组件)

4 组件的state和setState

5 组件state

6 setState修改状态

7 从JSX之中抽离逻辑代码

事件绑定this指向的转换(三种)

(1) 箭头函数

箭头函数自身不绑定this

(2) Function.prototype.bind()

利用ES中的bind方法,将事件处理程序中的this与组件事例绑定到一起

(3) class的事例方法

8 表单绑定

受控组件

demo (输入框、文本框、富文本框、下拉框)

javascript

 代码解读
复制代码
import React from 'react';
class Hrllo extends React.Component{
    state = {
        count:0,
        txt:'11',
        textarea:'富文本框',
        city:'bg',
        ischecked:false,

    }
    handleTxtx=e=>{
        console.log('你刚刚点击了'+e.target);
        this.setState({
            txt:e.target.value,
        }) 
        console.log(this.state.txt)
    }
    handleTextarea=e=>{
        console.log('你刚刚点击了'+e.target);
        this.setState({
            textarea:e.target.value,
        }) 
        console.log(this.state.textarea)
    }
    handleCity=e=>{
        console.log('你刚刚点击了'+e.target);
        this.setState({
            city:e.target.value,
        }) 
        console.log(this.state.city)
    }
    handleChecked=e=>{
        console.log('你刚刚点击了'+e.target);
        this.setState({
            ischecked:e.target.checked,
        }) 
        console.log(this.state.ischecked)
    }
    render() {
        return (
            <div>
                {/* 输入框 */}
                <div>
                    <input value={this.state.txt} name="txt" 
                    onChange={this.handleTxtx}></input>
                </div>
                {/* 复选框 */}
                <div>
                    <textarea value={this.state.textarea} 
                    onChange={this.handleTextarea}></textarea>
                </div>
                {/* 单选框 */}
                <select value={this.state.city} onChange={this.handleCity}>
                    <option value="sh">上海</option>
                    <option value="bj">北京</option>
                    <option value="cd">成都</option>
                </select>
                {/* 复选框 */}
                <input type="checkbox" checked={this.state.ischecked} onChange={this.handleChecked}>


                </input>
            </div> 
            )
    }
}
export default Hrllo

受控组件的优化

javascript

 代码解读
复制代码
import React from 'react';
class Hrllo extends React.Component{
    state = {
        count:0,
        txt:'11',
        textarea:'富文本框',
        city:'bg',
        ischecked:false,

    }
    handleChange=e=>{
        const target=e.target;
        const value=target.type === 'checkbox'
        ?target.checked
        :target.value;

        const name=target.name;

        console.log('你刚刚点击了'+e.target);
        this.setState({
           [name]:value,
        }) 
        console.log(this.state)
    }
    
    render() {
        return (
            <div>
                {/* 输入框 */}
                <div>
                    <input value={this.state.txt} name="txt" 
                    onChange={this.handleChange}></input>
                </div>
                {/* 复选框 */}
                <div>
                    <textarea value={this.state.textarea} name="textarea" 
                    onChange={this.handleChange}></textarea>
                </div>
                {/* 单选框 */}
                <select value={this.state.city} onChange={this.handleChange} name="city" >
                    <option value="sh">上海</option>
                    <option value="bj">北京</option>
                    <option value="cd">成都</option>
                </select>
                {/* 复选框 */}
                <input type="checkbox" checked={this.state.ischecked} name="ischecked" 
                onChange={this.handleChange}>


                </input>
            </div> 
            )
    }
}
export default Hrllo

非受控组件(DOM方式)

javascript

 代码解读
复制代码
// 非受控组件
import React from 'react';
class Hrllo extends React.Component{
    constructor(){
        super()
        this.txtref=React.createRef(); 
    }
   getTxt=()=>{
    console.log('文本框架的值'+this.txtref.current.value);
   }
    render() {
        return (
            <div>
                {/* 输入框 */}
                <input type="text" ref={this.txtref}/>
                <button onClick={this.getTxt}>获取文本框的值</button>
            </div> 
            )
    }
}
export default Hrllo

9 组件部分小案例:

评论列表:

报错:非大写字母开头

把大些字母改成小写字母就可以正常使用啦!


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

相关文章:

  • qt QKeySequence详解
  • 45.第二阶段x86游戏实战2-hook监控实时抓取游戏lua
  • 计算机毕业设计Python+Neo4j知识图谱医疗问答系统 大模型 机器学习 深度学习 人工智能 大数据毕业设计 Python爬虫 Python毕业设计
  • AI 写作(五)核心技术之文本摘要:分类与应用(5/10)
  • 时序数据库TimescaleDB安装部署以及常见使用
  • 2024 kali操作系统安装Docker步骤
  • Redhat7.9 安装 KingbaseES 金仓数据库 V9单机版(命令行安装)
  • 【设计模式】单例设计模式
  • openresty入门教程:ngx.print ngx.say ngx.log
  • Java LeetCode练习
  • Unity3D
  • 八、Spring Boot集成Spring Security之前后分离认证最佳实现测试
  • 多个摄像机画面融合:找到同一个目标在多个画面中的伪三维坐标,找出这几个摄像头间的转换矩阵
  • 【分布式】CAP理论
  • [2024最新] java八股文实用版(附带原理)---java集合篇
  • 大语言模型工作原理笔记
  • 机器学习——简单线性回归、逻辑回归
  • ethercat电机六自由度机械臂的ros2control+moveit2方案启动流程
  • 用Tokio掌握Rust异步编程
  • 【go从零单排】panic、recover、defer
  • 51c自动驾驶~合集10
  • python 京东api怎么写
  • 深入理解Java构造方法和接口:如何调用父类构造方法,接口能否包含方法实现?
  • MySQL缓存使用率超过80%的解决方法
  • 6.10 Queue接口/Deque接口 模拟栈与队列分析
  • 为什么谷歌SEO需要周期性维护?