我的编程空间,编程开发者的网络收藏夹
学习永远不晚

JavaScript中React面向组件编程怎么使用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

JavaScript中React面向组件编程怎么使用

这篇文章主要介绍“JavaScript中React面向组件编程怎么使用”,在日常操作中,相信很多人在JavaScript中React面向组件编程怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JavaScript中React面向组件编程怎么使用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

前言:

  • React组件中默认封装了很多属性,有的是提供给开发者操作的,其中有三个属性非常重要:state、props、refs。通过这三大核心属性的使用,我们能够实现对组件的状态进行更新。

一,组件的基本理解和使用

1. 函数组件

 <script type="text/babel">        function MyComponent() {              return <h3>我是函数定义的组件(适用于简单组件的定义)</h3>        }        ReactDOM.render(<MyComponent />, document.getElementById('test'))    </script>

函数组件的渲染过程

 1.React解析了组件标签,找到了对应的组件 2.发现这个组件是一个函数定义的,随后调用该函数,生成一个虚拟dom 3.最后将虚拟dom转化成为真实dom,呈现在页面中

2. 类式组件

<script type="text/babel">        class MyComponent extends React.Component {            render() {                return <h3>我是类定义的组件适用于复杂数据类型</h3>            }        }        ReactDOM.render(<MyComponent />, document.getElementById('test'))    </script>

类式组件的渲染过程

1.React解析了组件标签,找到了对应的组件2.发现这个组件是一个类定义的,随后new出来一个实例对象,并通过该实例调用原型上的render方法3.将render()返回的内容生成一个虚拟dom4.最后将虚拟dom转化成为真实dom,呈现在页面中

3.组件的注意事项

组件名必须首字母大写虚拟DOM元素只能有一个根元素虚拟DOM元素必须有结束标签

二,组件的三大核心属性

1.state

  • state 是一个对象,它包含组件的数据状态,当状态变化时,会触发视图的更新。你可以理解它的作用跟 Vue 中的 data 对象类似。

<script type="text/babel">        class Weather extends React.Component {            constructor() {                super()                this.state = {                    isHot: false,                    wind: '微风'                }                this.chang = this.chang.bind(this)            }            render() {                let { isHot, wind } = this.state                return <h3 onClick={this.chang}>今天的天气很 {isHot ? "炎热" : "凉爽"},{wind}</h3>            }hang() {                console.log(this)                this.setState({                    isHot: !this.state.isHot                })            }        }        ReactDOM.render(<Weather />, document.getElementById('test'))    </script>

注意事项

1.组件中render方法中的this为组件实例对象2.组件自定义的方法中this为undefined,如何解决?1.强制绑定this: 通过函数对象的bind()2.箭头函数3.状态数据,不能直接修改或更

简写方式

<script type="text/babel">        class Weather extends React.Component {           state = {                    isHot: false,                    wind: '微风'                }            render() {                let { isHot, wind } = this.state                return <h3 onClick={this.chang}>今天的天气很 {isHot ? "炎热" : "凉爽"},{wind}</h3>            }            chang = ()=>{                  this.setState({                    isHot: !this.state.isHot//这里的修改是一种合并,对比属性的变化,如果有赋新值,没有则跳过                })            }        }        ReactDOM.render(<Weather />, document.getElementById('test'))        let a = new Weather()</script>

设置状态:setState

setState(object nextState[, function callback])

不能在组件内部通过this.state修改状态,因为该状态会在调用 setState() 后被替换。

setState() 并不会立即改变 this.state,而是创建一个即将处理的 statesetState() 并不一定是同步的,为了提升性能 React 会批量执行 stateDOM 渲染。

setState() 总是会触发一次组件重绘,除非在 shouldComponentUpdate() 中实现了一些条件渲染逻辑。

2.props

  • React 中组件通过 props 属性接收外部传入的数据,这点 Vue 跟 React 是一致的

  • react 中说的单向数据流值说的就是 props,根据这一特点它还有一个作用:组件之间的通信

  • props 本身是不可变的,但是有一种情形它貌似可变,即是将父组件的 state作为子组件的 props,当父组件的 state 改变,子组件的 props 也跟着改变,其实它仍旧遵循了这一定律:props 是不可更改的

<script type="text/babel">  class MyComponent extends React.Component {    render() {      return (        <ul>          <li>{this.props.name}</li>          <li>{this.props.age}</li>        </ul>      );    }  }  ReactDOM.render(    <MyComponent name="Bob" age="18" />,    document.getElementById("test")  );</script>

props的特点:

  1. 每个组件对象都会有props(properties的简写)属性

  2. 组件标签的所有属性都保存在props中

  3. 内部读取某个属性值:this.props.propertyName

  4. 作用:通过标签属性从组件外 向组件内传递数据(只读 read only)

  5. 对props中的属性值进行类型限制和必要性限制

对props进行限制

  1. 引入 prop-type 库,这就是专门用于限制 props 属性的一个库

  2. 导入 prop-type 库,到当前页面

  3. 根据 Person.propTypes = {} 进行限制

class MyComponent extends React.Component {  render() {    return (      <ul>        <li>{this.props.name}</li>        <li>{this.props.age}</li>      </ul>    );  }}// 校验类型MyComponent.propTypes = {  name: PropTypes.string, // 这里的 PropTypes 变量是全局挂载的  age: PropTypes.number,};ReactDOM.render(  <MyComponent name="Bob" age={18} />,  document.getElementById("test"));

 props的简写

<script type="text/babel">        class Weather extends React.Component {            constructor(props) {//是否接受,取决于是否使用外部数据                super(props)//只能上面接受了props,super()就去传递,否则后续的使用,可能就会出现问题            }            static propTypes = {                name: PropTypes.string.isRequired,//限制name为字符串类型,必填                // age: PropTypes.number,                sex: PropTypes.string,                speak: PropTypes.func            }            static defaultProps = {                sex: '男',            }            render() {                let { name, age, sex } = this.props                return (                    <ul>                        <li>姓名:{name}</li>                        <li>性别:{sex}</li>                        <li>年龄:{age + 1}</li>                    </ul>                )            }        }     ReactDOM.render(<Weather name="tom" age={26} sex="女" />, document.getElementById('test'))</script>

函数组件使用props

<script type="text/babel">  // 函数组件  function MyComponent(props) {    return (      <ul>        <li>{props.name}</li>        <li>{props.age}</li>      </ul>    );  }  // 校验类型  MyComponent.propTypes = {    name: PropTypes.string,      age: PropTypes.number,  };  ReactDOM.render(    <MyComponent name="Bob" age={18} />,document.getElementById("test")  );</script>

3.ref

  1. React 中的 Refs 可以让我们访问 DOM 节点,它有三种使用方式:字符串方式,回调函数式,createRef。

  2. 在 React 中 Refs 提供了一种方式,允许用户访问DOM 节点或者在render方法中创建的React元素。

  3. 在 React单项数据流中,props是父子组件交互的唯一方式。要修改一个子组件,需要通过的新的props来重新渲染。

但是在某些情况下,需要在数据流之外强制修改子组件。被修改的子组件可能是一个React组件实例,也可能是一个DOM元素。对于这两种情况,React 都通过 Refs的使用提供了具体的解决方案。

回调函数方式

<script type="text/babel">  class MyComponent extends React.Component {        handleAlert = () => {      // 直接从组件实例上获取 myInput      console.log(this.myInput); // <input type="text">      alert(this.myInput.value);    };    render() {      return (        <div>          {}          <input ref={(ele) => (this.myInput = ele)} type="text" />          <button onClick={this.handleAlert}>alert</button>        </div>      );    }  }  ReactDOM.render(<MyComponent />, document.getElementById("test"));</script>

React官方提示:

如果 ref 回调函数是以内联函数的方式定义的,在更新过程中它会被执行两次,第一次传入参数 null,然后第二次会传入参数 DOM 元素。这是因为在每次渲染时会创建一个新的函数实例,所以 React 清空旧的 ref 并且设置新的。通过将 ref 的回调函数定义成 class 的绑定函数的方式可以避免上述问题,但是大多数情况下它是无关紧要的。

 createRef -官方推荐使用

<script type="text/babel">  class MyComponent extends React.Component {    // 创建 ref    myInput = React.createRef();    handleAlert = () => {      console.log(this.myInput.current); // 这里需要注意,元素是在 current 属性上      alert(this.myInput.current.value);    };    render() {      return (        <div>          {}          <input ref={this.myInput} type="text" />          <button onClick={this.handleAlert}>alert</button>        </div>      );    }  }  ReactDOM.render(<MyComponent />, document.getElementById("test"));</script>

上面就是使用 React.createRef() 方法创建 ref 的方式,特别需要注意的是,创建出来的 ref 的值是一个对象,我们需要的 DOM 元素是放在对象的 current 属性上,如上面的 this.myInput.current。

到此,关于“JavaScript中React面向组件编程怎么使用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

JavaScript中React面向组件编程怎么使用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

JavaScript中React面向组件编程怎么使用

这篇文章主要介绍“JavaScript中React面向组件编程怎么使用”,在日常操作中,相信很多人在JavaScript中React面向组件编程怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JavaS
2023-07-05

JavaScript中React面向组件编程实例代码分析

今天小编给大家分享一下JavaScript中React面向组件编程实例代码分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
2023-07-05

React函数组件与类组件怎么使用

这篇“React函数组件与类组件怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“React函数组件与类组件怎么使用”文
2023-06-30

Spring中怎么实现面向切面编程

Spring中怎么实现面向切面编程?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、AOP——另一种编程思想1.1、什么是 AOPAOP (Aspect Ori
2023-06-15

Python面向切面编程AOP及装饰器怎么使用

本篇内容主要讲解“Python面向切面编程AOP及装饰器怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python面向切面编程AOP及装饰器怎么使用”吧!什么是 AOPAOP,就是面向切
2023-06-30

Springboot怎样使用Aspectj实现AOP面向切面编程

Springboot怎样使用Aspectj实现AOP面向切面编程,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。要在 Springboot中声明 AspectJ 切面需在 IOC
2023-06-22

怎么用React撸一个日程组件

本篇内容主要讲解“怎么用React撸一个日程组件”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用React撸一个日程组件”吧!目录结构└─Calendar │ data.d.ts
2023-06-05

java中怎么实现面向对象编程

这篇文章给大家介绍java中怎么实现面向对象编程,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1:允许将子类的引用付给父类的对象,但子类中的那些不是从父类继承来的成员将不再可见。例:Bus bus=new Bus();
2023-06-17

Python中怎么实现面向接口编程

本篇文章为大家展示了Python中怎么实现面向接口编程,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。”面向接口编程“写 Java 的朋友耳朵已经可以听出干茧了吧,当然这个思想在 Java 中非常重
2023-06-15

使用react怎么实现一个Radio组件

使用react怎么实现一个Radio组件?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。测试组件:class Test extends Component { constr
2023-06-14

使用C语言怎么实现面向对象编程OOP

本篇文章为大家展示了使用C语言怎么实现面向对象编程OOP,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。过程&对象?一个对象就是由或多或少的针对这个对象的过程构成的,当然其中是少不了必要的属性。一个过
2023-06-16

面向对象编程中如何使用松耦合?

答案:松耦合是降低类之间依赖性的 oop 原则,提高代码的可维护性和可扩展性。优点:灵活性:轻松修改和替换类。重用性:减少类依赖,提高可复用性。可测试性:减少交互,便于单个类测试。实现方式:使用抽象接口,定义方法,实现类提供具体实现。使用依
面向对象编程中如何使用松耦合?
2024-05-21

怎么使用react实现一个tab组件

使用react实现一个tab组件的方法:1、通过“export default props => {...}”方式创建TAB button组件;2、通过“tab-group-layout.js”组件来传“tabIndex”,并设置默认选中的tab效果;3、用react继承“react.component”组件里的onMouseOver和OnMouseOut方法即可。
2022-11-22

Blazor页面组件怎么使用

本篇内容介绍了“Blazor页面组件怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Blazor应用中, 是使用组件来构建用户界面,
2023-06-29

Java编程中的面向对象怎么理解

本篇内容主要讲解“Java编程中的面向对象怎么理解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java编程中的面向对象怎么理解”吧!许多人刚刚学完现在看来是快要淘汰的只是面向过程的语言。他们的
2023-06-17

Vue中的组件化编程怎么应用

这篇文章主要介绍“Vue中的组件化编程怎么应用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vue中的组件化编程怎么应用”文章能帮助大家解决问题。一.模块与组件,模块化与组件化对组件的理解如果以我们
2023-07-04

怎么理解Python中的面向对象编程

本篇内容主要讲解“怎么理解Python中的面向对象编程”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么理解Python中的面向对象编程”吧!Python支持多种类型的编程范式,例如过程式编程、
2023-06-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录