前言
一图胜千言~,王者荣耀微信区猪八戒请求出栈~ 来到公司即将5个月了,这五个月时间也从原来的vue技术栈换成了react技术栈,因为二者都用过的缘故,还有一些其他因素,因而有了这篇文。
1、vue与react区别
除去数据绑定方式(react数据单向绑定,vue数据双向绑定)和语法不同外,令我感觉比较深的就是vue的结构比较固定而react比较自由,并且react有着很大的生态系统,vue比react好上手。
2、react知识点
react是用于动态构建用户界面的 JavaScript 库(只关注于视图),由Facebook开源
2.1 react基本使用
1.cdn方式引入文件
<!-- 引入react核心 -->
<script src="https://unpkg.com/react@16/umd/react.development.js" crossorigin></script>
<!-- 引入react-dom 用于支持react操作dom -->
<script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js" crossorigin></script>
<!-- 引入babel 用于将jsx编译成js -->
<script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
2.使用脚手架
npx create-react-app my-app
cd my-app
npm start
3.cdn方式简单例子
<body>
<div id="test"></div>
<!-- 引入react核心 -->
<script src="https://unpkg.com/react@16/umd/react.development.js" crossorigin></script>
<!-- 引入react-dom 用于支持react操作dom -->
<script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js" crossorigin></script>
<!-- 引入babel 用于将jsx编译成js -->
<script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
// 创建函数式组件
function MyComponent(params) {
console.log(this) //此处undefined babel翻译完毕开启严格模式
return <h1>what does the fox say?</h1>
}
//将dom挂载到test根节点
ReactDOM.render(<MyComponent/>, document.getElementById('test'));
</script>
</body>
2.2 react JSX
1. 全称: JavaScript XML
2. react定义的一种类似于XML的JS扩展语法: JS + XML本质是React.createElement(component,props, ...children) 方法的语法糖
3. 作用: 用来简化创建虚拟DOM
- 写法:
var ele=<h1>Hello JSX!</h1>
- 注意1:它不是字符串, 也不是HTML/XML标签
- 注意2:它最终产生的就是一个JS对象
4. 标签名任意: HTML标签或其它标签
5. 标签属性任意: HTML标签属性或其它
6. 表达式(有返回值)用{}包裹
7. 类名为className
.....
2.3 react 组件三大核心属性
react组件分为函数组件和类组件,组件名必须大写,组件中又有三大核心属性。
2.31 state
- state是组件对象最重要的属性, 值是对象(可以包含多个key-value的组合)
- 组件被称为"状态机", 通过更新组件的state来更新对应的页面显示(重新渲染组件)
2.32 props
- 每个组件中都会有props属性
- 组件标签的所有属性都存在props中
- 通过组件外部向组件内部传递props
- 组件内部不要直接修改props(可通过子组件接收父组件方法来修改)
2.33 ref
使用ref有如下两种方式:
- 字符串refs
<input ref="input1" id="input1" type="text" placeholder="点击按钮提示数据"/>
//使用 字符串refs 存在效率问题 可能在未来版本移除
const input2 = this.refs.input1;
- createRef
myRef = React.createRef();
<input type="text" ref={this.myRef} />
2.4 react生命周期
2.42新版本:
下图是react官网的生命周期图,平时开发如图所示的生命周期就够用,分为挂载和更新卸载三个阶段,新版的删除了一些。
- 挂载阶段生命周期执行顺序:constructor render componentDitMount
- 更新阶段生命周期执行顺序:render componentDidUpdate
- 卸载阶段生命周期执行顺序:componentWillUnMount