React
React 是一个用于构建用户界面的 JavaScript库,React主要用于构建UI,也就相当于MVC中的view层。React实际上就是3个库文件,我们只需要引用就可以使用react:
- react.js - React 的核心库
- react-dom.js - 提供与 DOM 相关的功能
- babel.js - Babel 可以将 ES6 代码转为 ES5 代码,这样我们就能在目前不支持 ES6 浏览器上执行 React 代码。Babel 内嵌了对 JSX 的支持。
JSX
它被称为 JSX,是一个 JavaScript 的语法扩展。我们建议在 React 中配合使用 JSX,JSX 可以很好地描述 UI 应该呈现出它应有交互的本质形式。JSX 可能会使人联想到模版语言,但它具有 JavaScript 的全部功能。
元素渲染
const element = <h1>Hello, world!</h1>;
ReactDOM.render ( //渲染元素的方法
element,
document.getElementById('example') //获取渲染元素的根节点
);
- React 元素都是不可变的。当元素被创建之后,你是无法改变其内容或属性的,更新的方法就是重新渲染,所以元素一般用const来定义
- React使用了虚拟DOM(REACT保存在内存中的一个虚拟DOM树)加diff算法来代替传统的DOM操作,首先会比较元素内容先后的不同,而在渲染过程中只会更新改变了的部分。
组件
对前端资源相同逻辑与静态元素的一种抽象。
- React 把组件看成是一个状态机(State Machines)。通过与用户的交互,实现不同状态,然后渲染 UI,让用户界面和数据保持一致。React 里,只需更新组件的 state,然后根据新的 state 重新渲染用户界面。
propes关键字,用于在组件之间传递信息,由上层组件向下层组件传递数据;组件不能修改自身的props
State
保存当前组件的状态信息,每当前组件状态改变,重绘当前组件的UI,注意state是私有的,完全受控于当前组件
不要直接修改state ```javascript // Wrong, 此代码不会重新渲染组件 this.state.comment = ‘Hello’;
// Correct, setState是唯一可以给this.state赋值的地方 this.setState({comment: ‘Hello’});
- State的更新可能是异步的,出于性能考虑,React 可能会把多个 `setState()` 调用合并成一个调用,此代码可能会无法更新计数器
```javascript
// Wrong
this.setState({
counter: this.state.counter + this.props.increment,
});
// 要解决这个问题,可以让 setState() 接收一个函数而不是一个对象。这个函数用上一个 state 作为第一个参数,
// 将此次更新被应用时的 props 做为第二个参数:
// Correct
this.setState((state, props) => ({
counter: state.counter + props.increment
}));
- state的更新会被合并
组件的生命周期
- componentDidMount,当该组件第一次被就渲染到dom中的时候执行,这在 React 中被称为“挂载(mount)”
- componentWillUnmount,当该组件在dom中被删除的时候执行,这在 React 中被称为”卸载(unmount):
- https://zh-hans.reactjs.org/docs/react-component.html#updating