热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Vue会了吗?来认识一下React吧(上)

前言React作为Facebook内部开发Instagram的项目中,是一个用来构建用户界面的优秀JS库,于2013年5月开源。作为前端的三大框架之一,React的应用可以说是非常

前言

React作为Facebook 内部开发 Instagram 的项目中,是一个用来构建用户界面的优秀 JS 库,于 2013 年 5 月开源。作为前端的三大框架之一,React的应用可以说是非常的广泛,包括BAT在内的许多大公司很多项目都是基于其开发的。

Vue:除了VDom之外,Vue的响应性能和React相比还是有很大的区别,无论是本身的语法层面还是外围的第三方支持软件,总之,迁移起来不会是那么容易的事情。

但是作为一名热爱前端的技术人员,学习优秀的技术栈仿佛已经成了一种习惯,在这里结合阮一峰React以及对阮一峰老师15年的教程进行版本更新,简单介绍一下React的入门,本文中所有demo代码都以图片形式展示,目的是建议手打尝试,而不是直接复制,如需代码可以点击这里。

使用 create-react-app 快速构建 React 开发环境

create-react-app 是来自于 Facebook,通过该命令我们无需配置就能快速构建 React 开发环境。

create-react-app 自动创建的项目是基于 Webpack + ES6 。

  • yarn add create-react-app -g
  • create-react-app projectName
  • cd projectName
  • yarn start

然后打开浏览器输入http://localhost:3000/,就可以看到React的六芒星LOGO了。

以下是React重要的部分

  • JSX – 允许我们编写类似HTML的语法 转换为lightweightJavascript对象。
  • 虚拟DOM – 实际DOM的Javascript表示。
  • React.Component – 您创建新组件的方式
  • render(方法) – 描述特定组件的 UI 外观 。
  • ReactDOM.render – 将React组件渲染到DOM节点。
  • state – 组件的内部数据存储(对象)。
  • constructor(this.state) – 建立组件初始 state(状态) 的方式。
  • setState – 一种辅助方法,用于更新组件的 state(状态) 并重新渲染 UI。
  • props – 从父组件传递给子组件的数据。
  • propTypes – 允许您控制传递给子组件的某些 props(属性) 的存在或类型。
  • defaultProps – 允许您为组件设置默认 props(属性) 。
  • 组件的生命周期:

    1. componentDidMount – 装载组件后触发
    2. componentWillUnmount – 在组件卸载之前触发
    3. getDerivedStateFromProps – 当组件装载时以及每当props 更改时触发。 用于在其 props(属性) 更改时更新组件的状态
  • 事件:

    1. onClick
    2. onSubmit
    3. onChange

React的JSX语法

《Vue会了吗?来认识一下React吧(上)》
HTML 语言直接写在 Javascript 语言之中,不加任何引号,这就是 JSX 的语法,它允许 HTML 与 Javascript 的混写

因为React没有vue那样的v-for一键循环,所以要自己手动用map来实现

效果图:
《Vue会了吗?来认识一下React吧(上)》

React组件嵌套组件以及数据传递子组件

《Vue会了吗?来认识一下React吧(上)》
vue通过子组件中的props来传递数据,而React则是用this.props.attr来传递,注意,没有$符号!
组件类的第一个字母必须大写,否则会报错,比如HelloMessage不能写成helloMessage。另外,组件类只能包含一个顶层标签,否则也会报错。

JSX 允许直接在模板插入 Javascript 变量。如果这个变量是一个数组,则会展开这个数组的所有成员.我们定义了一个arr,里面是2个标题标签,通过在ul模板中添加{arr}来实现效果
(注意不是vue的””,两者不要搞混了)

《Vue会了吗?来认识一下React吧(上)》

this.props.children

this.props.attr是取到组件传递过来的数据或属性,而this.props.children则表示组件的所有子节点,可以通过this.props.children.map来遍历出来验证。
《Vue会了吗?来认识一下React吧(上)》
《Vue会了吗?来认识一下React吧(上)》

React之PropTypes

组件的属性可以接受任意值,字符串、对象、函数等等都可以。有时,我们需要一种机制,验证别人使用组件时,提供的参数是否符合要求。

组件类的PropTypes属性,就是用来验证组件实例的属性是否符合要求

yarn add prop-types

import PropTypes from ‘prop-types’

《Vue会了吗?来认识一下React吧(上)》
MyTitle中有一个title属性,他的值为一个字符串,我们可以通过MyTitle.propTypes来定义该组件中属性的类型.如果将title: PropTypes.string改为其他类型,就会报以下的错误。
《Vue会了吗?来认识一下React吧(上)》

React之ref

  1. 同vue的ref作用一样,组件并不是真实的DOM节点,而是存在于内存之中的一种数据结构,叫做虚拟 DOM。
  2. 只有当它插入文档以后,才会变成真实的 DOM 。根据 React 的设计,所有的 DOM 变动,都先在虚拟 DOM上发生,然后再将实际发生变动的部分,反映在真实 DOM上,这种算法叫做 DOM diff ,它可以极大提高网页的性能表现。
  3. 但是,有时需要从组件获取真实 DOM 的节点,这时就要用到 ref 属性。

图片放的太多了,在这里贴一下代码..请忽视开头说的话..

class App extends Component {
handleClick () {
this.refs.myTextInput.focus()
}
render() {
return (






);
}
}

在这里需要强调的是,React的事件中如果不用剪头函数,那就要用bind来绑定this。

React之this.state以及点击事件

React中的state就相当于vue里的data数据存储,而小程序的this.setData,大家懂的..

class LikeButton extends Component {
state = {
liked: false
}
handleClick () {
// console.log(this)
this.setState({
liked: !this.state.liked
})
}
render() {
const text = this.state.liked?'liked':'don\'t like'
return (

this.handleClick() }>
You { text } this.click to toggle


)
}
}

在这里定义一个text变量,通过state中的liked来判断text的值,然后再通过onClick点击事件来反复改变liked的值,效果可以自己通过代码实现看看,就是普通的MVVM模型。

React之实现双向数据绑定

vue里面v-model一键实现的事情React又没有-0-,不过我们可以通过onChange事件来简单实现它,直接上代码.

class App extends Component {
state= {
value: 'Hello!'
}
handleChange (event) {
this.setState({
value: event.target.value
}) }
render() {
const val = this.state.value
return (




{ val }




);
}
}

React之组件生命周期

组件的生命周期分成三个状态:

  • Mounting:已插入真实 DOM
  • Updating:正在被重新渲染
  • Unmounting:已移出真实 DOM

React 为每个状态都提供了两种处理函数,will 函数在进入状态之前调用,did 函数在进入状态之后调用,三种状态共计五种处理函数。

  • componentWillMount(): 在插入真实DOM之前调用
  • componentDidMount(): 在插入真实DOM之后调用
  • componentWillUpdate(object nextProps,object nextState): 在被重新渲染之前调用
  • componentDidUpdate(object prevProps, object prevState): 在被重新渲染之后调用
  • componentWillUnmount(): 在移除真实DOM之前调用

此外,React 还提供两种特殊状态的处理函数。

  • componentWillReceiveProps(object nextProps):已加载组件收到新的参数时调用
  • shouldComponentUpdate(object nextProps, object nextState):组件判断是否重新渲染时调用

另外,组件的style属性的设置方式也值得注意,不能写成而要写成style={{opacity: this.state.opacity}}

结语

**作为一个前端程序猿很不容易,前端的技术更新太快,也出现了“别更新了,老子学不动了”这类前端的梗。不过前端层出不穷的技术让我们看到了前端的未来,我们都是热于分享的人,希望正在学习的我也能够帮助到正在学习的你。 这些demo都在我的github,感兴趣的朋友可以clone下来看下,最近搭了一个个人blog,欢迎来踩,PC端主题一股科幻风有没有!!主题来自于hexo主题
最后说一句!很重要!如果我的这篇文章帮助到了你,那你可以点个star再走嘛~一起upupup!**


推荐阅读
  • Vue基础一、什么是Vue1.1概念Vue(读音vjuː,类似于view)是一套用于构建用户界面的渐进式JavaScript框架,与其它大型框架不 ... [详细]
  • 本文总结了在编写JS代码时,不同浏览器间的兼容性差异,并提供了相应的解决方法。其中包括阻止默认事件的代码示例和猎取兄弟节点的函数。这些方法可以帮助开发者在不同浏览器上实现一致的功能。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • 本文记录了在vue cli 3.x中移除console的一些采坑经验,通过使用uglifyjs-webpack-plugin插件,在vue.config.js中进行相关配置,包括设置minimizer、UglifyJsPlugin和compress等参数,最终成功移除了console。同时,还包括了一些可能出现的报错情况和解决方法。 ... [详细]
  • JavaScript和HTML之间的交互是经由过程事宜完成的。事宜:文档或浏览器窗口中发作的一些特定的交互霎时。能够运用侦听器(或处置惩罚递次来预订事宜),以便事宜发作时实行相应的 ... [详细]
  • React基础篇一 - JSX语法扩展与使用
    本文介绍了React基础篇一中的JSX语法扩展与使用。JSX是一种JavaScript的语法扩展,用于描述React中的用户界面。文章详细介绍了在JSX中使用表达式的方法,并给出了一个示例代码。最后,提到了JSX在编译后会被转化为普通的JavaScript对象。 ... [详细]
  • 本文讨论了将HashRouter改为Router后,页面全部变为空白页且没有报错的问题。作者提到了在实际部署中需要在服务端进行配置以避免刷新404的问题,并分享了route/index.js中hash模式的配置。文章还提到了在vueJs项目中遇到过类似的问题。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了Java的集合及其实现类,包括数据结构、抽象类和具体实现类的关系,详细介绍了List接口及其实现类ArrayList的基本操作和特点。文章通过提供相关参考文档和链接,帮助读者更好地理解和使用Java的集合类。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 本文介绍了在wepy中运用小顺序页面受权的计划,包含了用户点击作废后的从新受权计划。 ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
  •     这里使用自己编译的hadoop-2.7.0版本部署在windows上,记得几年前,部署hadoop需要借助于cygwin,还需要开启ssh服务,最近发现,原来不需要借助cy ... [详细]
author-avatar
hobeson_861
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有