title: React一点点
author: Gamehu
tags:
- react
categories:
- 工作
date: 2018-08-18 11:45:00
---
{% asset_img one_year_of_react_native.png %}
网上关于React的内容一抹多,我就不献丑了,我简单记录一下,主要是一些编程中不太注意的的点。
***React***
A JavaScript library for building user interfaces。React是MVC中作用于V的一种库,需要注意它不是一个框架只是一个库。
[reacts to state changes](https://www.quora.com/Why-is-React-called-React),react是对页面状态变化做出反应的意思。
***Component***
Component is A piece of the UI,React App is Tree of component。组件的概念其实之前就有不过我是从React才开始了解的,即把一个前端应用拆分为一个个的组件。
***React*.*createElement*()**
没看到有用React但是为什么还需要import React?
{% asset_img 1.png https://youtu.be/Ke90Tje7VS0%}
因为是JSX到JS这样编译后是需要React.createElement来创建元素的,所以需要引入
```
// This JSX:
React.render(
Hello World!
, mountNode);
// Is transformed to this JS:
React.render(React.createElement("div", {id:"msg"}, "Hello World!"), mountNode);
```
***JSX***
JavaScript XML
***Why can't JSX write If-Else***
因为 JSX 只是函数调用和对象创建的语法糖,像一下的代码编译后是不合法的JS,没法识别。
```
// This JSX:
Hello World!
// Is transformed to this JS:
React.createElement("div", {id: if (condition) { 'msg' }}, "Hello World!");
```
***Arrow Function***
为什么箭头函数可以提代bind(this),首先是因为JS中的一个实验特性[Static class fields and private static methods](http://github.com/tc39/proposal-static-class-features/),一个箭头函数没有它自己的 `this`,不过他使用的是封闭的执行上下文的 `this` 值。箭头函数在词法上绑定它们的上下文,所以 `this` 实际上指向最原始的上下文。
所以有个点我们需要明白,bind不是react要求的,而是因为JS的this对象的指向问题导致的。
bind(this)延伸阅读:[react-binding-patterns-5-approaches-for-handling-this](https://www.freecodecamp.org/news/react-binding-patterns-5-approaches-for-handling-this-92c651b5af56/)
***setState***
*它接受一个对象或者函数作为参数*,如果你想在 `setState` 之后使用新的 `state` 来做后续运算就需要使用到函数。
[state 和 setstate](http://huziketang.mangojuice.top/books/react/lesson10):为什么不用直接用this.state.xxx=xxx;而必须用setState才能修改state,因为如果用this.state.xxx=xxx,React无法知道你修改了状态,所以需要调用setState通知到React你修改了状态,然后React会走它那一套更新状态的步奏。
***props vs state***
共同点:都可以决定组件的行为和显示形态。
[react-state-vs-props-explained](https://codeburst.io/react-state-vs-props-explained-51beebd73b21):
state可以理解为函数的局部变量,所以外部是不能访问和修改的,只有内部能维护。
props它是组件间对话的方式,让外部(父组件)数据和行为传入组件(子组件)内部达到更新内部组件的目的。
***controlled vs uncontrolled***
简单的理解了一下,[受控组件](https://www.robinwieruch.de/react-controlled-components)这儿受控其实指的是通过props来控制data,非受控通常说的是自己内部维护data,大多数情况下我们都用的是受控组件
[What are controlled components and uncontrolled components?](https://stackoverflow.com/questions/42522515/what-are-controlled-components-and-uncontrolled-components)
***lifecycle hooks***
{% asset_img 1.png https://youtu.be/Ke90Tje7VS0%}
## 延伸阅读:
{% blockquote proposal-class-public-fields https://tc39.es/proposal-class-public-fields/ %}
{% endblockquote %}
{% blockquote github tc39 https://github.com/tc39/proposal-class-public-fields %}
{% endblockquote %}
{% blockquote github Demystifying Memory Usage using ES6 React Classes https://medium.com/dailyjs/demystifying-memory-usage-using-es6-react-classes-d9d904bc4557 %}
{% endblockquote %}
{% blockquote understanding-reactjs-setstate https://medium.com/@baphemot/understanding-reactjs-setstate-a4640451865b %}
{% endblockquote %}