React Hooks 设计思想

知识点:

为什么推出 Hooks

  • 告别复杂的 class 组件
  • 拆分逻辑和复用逻辑

hooks 使用原则

  • 只能在函数组件或者自定义 Hooks 中调用 Hooks
  • 不能在条件语句或者循环语句使用 Hooks

为什么不能在条件语句或者循环语句使用 Hooks?

const [count, setCount] = useState() 为例,当 React 内部存储 count 这个值时并没有指定一个名字存储。当下一次 render 时,React 想要重新取出 count 的值时,是从链表结构里按照执行顺序取出来。因而,为了保证执行 hooks 的准确性,React 使用链表的数据结构并顺序取值,如果在条件语句或者循环语句使用 Hooks,取值就会出错。

要解决这种办法,可以传入一个 key 作为 useState 的第二个参数,但是实现起来没那么优雅。

1
const [count, setCount] = useState(initState, key)

什么是 Hooks

Hooks 是 React 16.8 版本出现的特性,它是诸如 useState、useEffect 等一系列钩子函数。Hooks 的出现开发者在不需要写 class 组件时,也能具有 state 和其他 React 特性,函数组件从 stateless 变成 stateful。

Read More

React 生命周期

React 生命周期

知识点: render 是灵魂,生成虚拟 DOM,其他生命周期是躯干,灵魂必须有,躯干不一定。

React 是一个构建用户界面的 JavaScript 库,其核心的 Virtual DOM 是由生命周期的 render 方法生成的。初始化时,render 方法生成 Virtual DOM 交给 ReactDOM.render 方法渲染成真实 DOM;更新时, render 方法生成的新 Virtual DOM 与旧 Virtual DOM 进行比较,针对差异部分 ReactDOM.render 对真实 DOM 进行修改。

React 生命周期中的 render 在其中扮演着 Virtual DOM 生成的关键角色,其他生命周期则像是 render 方法的辅助,做数据的初始化或者修改,辅助 render 方法完成 Virtual DOM 的生成。

Read More

React 组件之间数据传递

知识点:

  • 单向数据流即数据只能从父组件向自组件流动
  • 四种 React 组件进行数据传递的方法:props/context/EventEmitter/Redux

React 是一个构建用户界面的 JavaScript 库,其思想是用数据驱动视图。

可以用如下代码来表示:

1
UI = render(data)

data 就是 React 界面的核心。在渲染用户界面时,data 不是静止不动的,它可能需要在父子组件之间共享、可能需要在兄弟组件共享以及其他层次关系的组件之间共享。下面我们就讲 4 种组件间数据传递的方式。

Read More

什么是函数式编程

什么是函数式编程

函数式编程是一种编程范式。编程范式是基于程序语言的特点对程序语言进行分类的一种方式,常见的编程范式有:函数式编程、指令式编程、过程式编程、面向对象编程等等。

在面向对象编程中,程序则是一系列相互作用的对象,由于方法论的不同,面向对象编程范式又分为基于类编程和基于原型编程。

函数式编程的理论基础 Lambda 演算。Lambda 演算是一种数学的抽象,是研究函数如何抽象定义、函数如何被引用以及递归的形式系统。一个函数式编程程序会被看作是一个无状态的函数计算的序列,正如函数关心的是数据的映射,函数式编程也是如此。

Read More

前端组件化和模块化

前端有两个大方向一定要掌握,一是组件化和模块化,二是工程化,今天我们来聊一聊组件化和模块化。组件化和模块化满足了软件工程低内聚、高耦合、代码模块化的原则,提高代码的可重用性和可复用性,是提高工作效率的重要法宝。

Read More

单页应用与前端路由库设计原理

什么是单页应用

单页应用就是只有一个 HTML 页面的应用,页面 URL 的变化只是通过浏览器 API 修改,浏览器不会向服务器请求新的 HTML 的,而是通过 JS 控制不同的 URL 渲染相应的内容。

单页应用相比传统的 JSP、PHP 多页应用,在切换页面时无需刷新,只需进行局部更新,加载内容快,页面的数据状态和用户数据依然保留。但是,因为单页应用返回的是一个 body 空白的 HTML 文件,HTML 内容由 JS 生成,搜索引擎无法获取到,可能影响搜索引擎排名。

Read More