1,className一定是大写字母开头,例如:App-logo,App,App-header。

2,有关react元素的更新,唯一办法是创建新元素,然后重新将其传入ReactDOM.render()中重绘。

3,通过react官方的脚手架create-react-app新建项目时,你会发现里面没有任何的配置文件,其实webpack的配置文件被隐藏了,可以通过执行:npm run eject

将其暴露出来,暴露的文件夹有config和scripts两个文件夹。

4,react的脚手架项目中的index.html中并未引入src/index.js,那么是怎么联系起来的呢?

在config/paths.js中,以及webpack.config.js中:

在webpack.config.js中,最后生成一个可以注入script标签的index.html。

这些该有的配置react脚手架creat-react-app已经帮你配置并且隐藏,前端开发人员需要关注的只是src/文件夹下面的JS业务逻辑。

React使用JSX代替常规的javascript。JSX看起来像是XML的JS语法拓展,优点是,执行更快;类型安全,编译过程中就能发现错误;编写模板更加简单快速。

在react项目中使用JSX来描述用户界面,用来声明React中的元素;

const element = <h1>Hello,world!</h1>;

5,由于 JSX 就是 JavaScript,一些标识符像 class 和 for 不建议作为 XML 属性名。作为替代,React DOM 使用 className 和 htmlFor 来做对应的属性。

6,在 JSX 中不能使用 if else 语句,但可以使用 conditional (三元运算) 表达式来替代。

7,JSX 允许在模板中插入数组,数组会自动展开所有成员。

8,JSX中的注释需要写在花括号中 {/*注释...*/}。

9,在 JSX 中使用 JavaScript 表达式。表达式写在花括号 {} 中。

10,const element = <HelloMessage /> 为用户自定义的组件。原生 HTML 元素名以小写字母开头,而自定义的 React 类名以大写字母开头,比如 HelloMessage 不能写成 helloMessage。除此之外还需要注意组件类只能包含一个顶层标签,否则也会报错。

11,复合组件:即创建多个组件来合成一个组件,把组件的不同功能点进行拆分。

12,使用react写了一个简单的弹窗功能,使用es6的class写法:

import React, { Component } from 'react';
import './OpenPacket.css'; function MaskCover(props){
return <div className="MaskCover" onClick={props.onClick} ></div>
}
class OpenPacket extends Component {
constructor(){
super();
this.handleShow = this.handleShow.bind(this);
this.handleHide = this.handleHide.bind(this);
this.state = {isShow:false,date:new Date()};
}
componentDidMount(){
this.timerID = setInterval(()=>{
this.tick()
},1000)
}
      componentWillUnmount() {
           clearInterval(this.timerID);
      }
    tick(){
this.setState({
date:new Date()
})
}
handleShow(){
this.setState({isShow:true});
}
handleHide(){
this.setState({isShow:false});
}
render(){
const isShow = this.state.isShow;
let button;
if(isShow){
button = <MaskCover onClick={this.handleHide} />
}
return(
<div>
我是主页面{this.state.date.toLocaleString()}
<button onClick={this.handleShow}>打开遮罩</button>
{button}
</div>
)
}
} export default OpenPacket;

功能即点击打开遮罩按钮显示遮罩,点击遮罩背景关闭遮罩。主要注意的点:

(1)主页面是个class OpenPacket,遮罩组件是个function MaskCover,状态传递props,仅含有onClick属性,而点击事件的传递则是在子组件上面,通过props传递,在父组件当中定义真正的点击事件事务。

(2)主页面是es6的class写法,es6的class类似于构造函数,constructor方法就是构造方法,里面的this关键字代表实例对象。

class是通过extends关键字实现继承,ES5是通过修改原型链来实现继承的,上面定义的类OpenPakcet extends Component,也就是该类继承React组件的所有属性和方法。

(3)super表示父类的构造函数,用来新建父类的this对象。子类必须在constructor中调用super方法,否则新建实例时会报错!OpenPacket继承了React的Component类,而自己内部的this对象,必须通过父类的构造函数来塑造,得到与父类Component类同样的实例属性和方法,才能够正确渲染页面。如果不调用super方法,子类得不到this对象。ES5的继承实质是,先创建子类的实例对象this,然后将父类方法添加到this上面(Parent.apply(this);ES6不同之处在于,先将父类实例对象方法和属性加到this上面,所以必须先调用super方法,然后再用子类的构造函数修改this。

(4)上面的handleShow和handleHide方法是定义在OpenPacket对象的原型上面。因为单独调用handleShow和handleHide时候,this会指向所在运行的环境,所以要绑定this指向,方法有三,其他两种分别是:使用es6的箭头函数【推荐方法,简单好用】;还有就是在调用时候绑定this:

<OpenDialog onClick={(e) =>this.clickSure(e)}/>
确保this绑定在clickSure方法上,但是每次渲染都会创建一个不同的回调函数,可能会造成额外的重新渲染操作,所以不推荐!
还有也是在调用函数时候绑定this:
this.handleclick.bind(this,要传的参数),此时要传递的参数在this的后面。
<PacketBG name={this.state.name} wishTxt={this.state.wishTxt} onClick={this.openPacket.bind(this,this.state.name)}/>

this 的本质就是:this跟作用域无关的,只跟执行上下文有关。

(5)React的State【状态】,this.state = {},React通过更新组件的state,进而重新渲染用户界面(不操作DOM);可以看到主页面的时间每分钟都在tick变化,主要就是通过定时器每一秒钟更新state中的date属性值,其中componentDidMount()为React的生命周期钩子,生命周期钩子有好几个,需要专门列一个专题来讲,只需了解react的数据更新是通过状态State来实现的,具体底层原理,等熟悉的差不多的时候再详细了解吧!

13,React的数据流自顶而下流动(单向数据流),怎么理解呢?

自顶向下单向流动,即从父组件到子组件,state和props是React组件的核心概念,如果顶层组件初始化props,那么React会向下遍历整棵组件树,重绘相关子组件;

而state只关心每个组件内部的状态或者局部状态,内部状态虽然经常改变,但是却跑不出组件,props和context用于组件中数据的传递,props支持逐层传递数据,而context则支持跨级传递。

state,props,context都是react中的数据载体。

14,react项目针对不闭合标签的错误,会立马报错,例如:Expected corresponding JSX closing tag for <p> ,然后整个页面报错,提醒你解决报错后再继续进行下去。

【未完待续】

新年flag1——写react项目像vue一样熟练,并且知晓简单的基础原理。

写react项目要注意的事项的更多相关文章

  1. 写react项目需要注意的

    key应该是稳定的,且唯一的,尽量不要用索引作为key 都知道React组件渲染列表时需要为每个列表元素分配一个在列表中独一无二的key,key可以在DOM中的某些元素被增加或删除视乎帮助React识 ...

  2. 从零开始搭建一个react项目

    Nav logo 120 发现 关注 消息 4 搜索 从零开始搭建一个react项目 96 瘦人假噜噜 2017.04.23 23:29* 字数 6330 阅读 32892评论 31喜欢 36 项目地 ...

  3. React项目使用Redux

    ⒈创建React项目 初始化一个React项目(TypeScript环境) ⒉React集成React-Router React项目使用React-Router ⒊React集成Redux Redux ...

  4. 手把手教你用webpack3搭建react项目(开发环境和生产环境)(一)

    开发环境和生产环境整个配置源码在github上,源码地址:github-webpack-react 如果觉得有帮助,点个Star谢谢!! (一)是开发环境,(二)是生产环境. 一.首先创建packag ...

  5. 如何在React项目中直接使用WebAssembly

    前言 自从入坑WebAssembly以来,躺了很多坑,也浏览了很多资料,都没有看到很多能够直接在前端项目中使用WebAssembly的例子.即使有,我自己按照介绍的步骤一步一步来, 也会报各种错误,官 ...

  6. nginx代理部署Vue与React项目

    nginx代理部署Vue与React项目 一,介绍与需求 1.1,介绍 Nginx (engine x) 是一个高性能的HTTP和反向代理服务,也是一个IMAP/POP3/SMTP服务.Nginx是由 ...

  7. React项目搭建与部署

    React项目搭建与部署 一,介绍与需求 1.1,介绍 1.1.1,React简介 React 是一个用于构建用户界面的 JAVASCRIPT 库. React主要用于构建UI,很多人认为 React ...

  8. 创建react项目的几种方法

    前言: 构建React项目的几种方式: 构建:create-react-app 快速脚手架 构建:generator-react-webpack 构建:webpack一步一步构建 1)构建:creat ...

  9. Docz 用 MDX 写 React UI 组件文档

    Docz 用 MDX 写 React UI 组件文档 前言 为了提升开发效率,创建一套 UI 组件库是一种较为有效的方式之一:可以减少重复工作.提高可复用,所以现在越来越多团队开始创建自己的 UI 组 ...

随机推荐

  1. [LC] 557. Reverse Words in a String III

    Given a string, you need to reverse the order of characters in each word within a sentence while sti ...

  2. python语法基础-面向对象-基础-长期维护

    ###############    类的基本操作    ############## """ 类的基本认识: 1,类就是一个模子 2,dict,list都是类,具体的一 ...

  3. 企业框架-Spring

    1.什么是Spring Spring是最受欢迎的企业级Java应用程序开发框架,数以百万的来自世界各地的开发人员使用Spring框架来创建性能好.易于测试.可重用的代码. Spring框架是一个开源的 ...

  4. QT "debugger unknow type"问题解决办法

    windows上使用qt编译有两种,一种是vs的编译器,一种是MinGW的. 这种问题主要是发生在选择了MSVC2013编译器的版本,这个版本的qt需要再装一个调试器,而MinGW不用. 解决办法:下 ...

  5. jmeter接口压测的反思

    jmeter接口压测的反思 1.keepalive的坑:连接数满了,导致发起的请求失败. 2.token关联?是数据库取做参数化,还是随机数生成(需要改代码) 3.签名问题如何处理? 4.压测负载机端 ...

  6. Java Servlet XML文件配置

  7. webpack debug

    chrome地址栏输入:chrome://inspect/#devices 点击 Open dedicated DevTools for Node 在需要打断点的地方加入debugger 控制台输入 ...

  8. 自动化移动安全渗透测试框架:Mobile Security Framework

    自动化移动安全渗透测试框架:Mobile Security Framework 译/Sphinx  测试开发社区  7月3日 Mobile Security Framework (移动安全框架) 是一 ...

  9. Python3爬虫:(一)爬取拉勾网公司列表

    人生苦短,我用Python 爬取原因:了解一下Python工程师在北上广等大中城市的薪资水平与入职前要求. Python3基础知识 requests,pyquery,openpyxl库的使用 爬取前的 ...

  10. react ReactDOMServer

    此文章是翻译ReactDOMServer这篇React(版本v15.4.0)官方文档. ReactDOMServer 如果你用script 标签来使用React,这些顶级APIs 将会在全局React ...