React是什么,作用是什么,怎么实现的,优势是什么,劣势是什么

React是什么,作用是什么

官方定义:React用于构建用户界面的 JavaScript 库

官网:React – A JavaScript library for building user interfaces 官网就多语言支持了

React怎么实现的

源码在这里:https://github.com/facebook/react/

源码相当庞大。上一个最简原理版本的源码,解释一下React的工作原理。

在开发蜂巢指纹浏览器(NestBrowser)的时候,都有去git一下react的源码翻了一下,相当复杂,相当庞大。

注意:

1、React15以前的版本,虚拟DOM是用树实现的。

2、React16以后的版本,虚拟DOM是用链表实现的。本文章的案例只适应于React16以上版本。

蜂巢指纹浏览器(NestBrowser)使用的版本号是"react": "17.0.2”。

React最简实现,直接上源码https://github.com/pomber/didact

怎么把这份源码在浏览器上跑出来React的效果呢?

1、把didact.js下载回来,放在一个特定目录

2、在同目录下建立一个index.html,输入如下最简html代码:

<html>
<head></head>
<body>
    <div id="root"></div>
    <script src="./didact.js"></script>
</body>
</html>

3、把index.html拉入浏览器,发现白屏,打开devtools发现输出错误:

4、是jsx代码不能被正常解析,浏览器是不能解析运行jsx代码的,所以需要手动使用babel把didact.js中的jsx代码段编译为正常的javascript:

​5、修改后代码如下:

/** @jsx Didact.createElement */
/*
function Counter() {
  const [state, setState] = Didact.useState(1)
  return (
    <h1 onClick={() => setState(c => c + 1)}>
      Count: {state}
    </h1>
  )
}
const element = <Counter />
*/
function Counter() {
  const [state, setState] = Didact.useState(1);
  return /*#__PURE__*/Didact.createElement("h1", {
    onClick: () => setState(c => c + 1)
  }, "Count: ", state);
}
const element = /*#__PURE__*/Didact.createElement(Counter, null);

const container = document.getElementById("root")
Didact.render(element, container)
6、保存再刷新index.html并调试javascript,一个最简实现React就跑起来了。每点击一次加1。

​主要代码解析:

1、render函数:

function render(element, container) {
  wipRoot = {
    dom: container,
    props: {
      children: [element],
    },
    alternate: currentRoot,
  }
  deletions = []
  nextUnitOfWork = wipRoot
}

//构建一个需要render的fiber节点

2、react工作主循环

function workLoop(deadline) {
  let shouldYield = false
  while (nextUnitOfWork && !shouldYield) {
    nextUnitOfWork = performUnitOfWork(
      nextUnitOfWork
    )
    shouldYield = deadline.timeRemaining() < 1
  }

  if (!nextUnitOfWork && wipRoot) {
    commitRoot()
  }

  requestIdleCallback(workLoop)
}

requestIdleCallback(workLoop)

//这是一个无限循环在判断处理fiber链表
3、hook实现
function useState(initial) {
  const oldHook =
    wipFiber.alternate &&
    wipFiber.alternate.hooks &&
    wipFiber.alternate.hooks[hookIndex]
  const hook = {
    state: oldHook ? oldHook.state : initial,
    queue: [],
  }

  const actions = oldHook ? oldHook.queue : []
  actions.forEach(action => {
    hook.state = action(hook.state)
  })

  const setState = action => {
    hook.queue.push(action)
    wipRoot = {
      dom: currentRoot.dom,
      props: currentRoot.props,
      alternate: currentRoot,
    }
    nextUnitOfWork = wipRoot
    deletions = []
  }

  wipFiber.hooks.push(hook)
  hookIndex++
  return [hook.state, setState]
}

React优势是什么,劣势是什么

蜂巢指纹浏览器(NestBrowser)开发中体会到优劣势都很明显,更多的是思维的转变。对新人来说,React更好接受,对拥有JQuery编程经验的前端来说,真是束手束脚。

React优势

        1.简洁:

在当业务流程复杂的时候,我们就会发现单向数据流和组件化的组合方式会很大程度上降低问题的复杂度

        2.灵活:

在 React 里,我们可以把一切理解为 JS,这样操作起来就少了很多束缚;另外组件提供的多种嵌套方式,数据驱动、生命周期等让开发变得更加顺畅

        3.高效

这离不开我们刚才的虚拟 DOM,它通过减少和优化 对DOM 的操作,能在 React 在浏览器里有更好的性能表现

React劣势

  1. React 只是 视图层的一个框架,如果需要做其他事情,需要依赖它的生态系统;如处理单页面路由使用 Router,处理数据使用 Redux

  2. 版本更新频繁,经常不向前兼容

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React 是一个非常流行的 JavaScript 框架,它的主要优点包括: 1. 高效的渲染:React 使用虚拟 DOM 技术,可以快速更新页面上的元素,减少了浏览器的重绘和回流,提升了页面的性能。 2. 可重用的组件:React 将 UI 拆分为独立的组件,可以将这些组件重用在不同的应用中,从而减少了代码的重复。 3. 简单易用的 API:React 的 API 设计非常简单易用,可以快速上手,而且可以和其他框架或库很好地集成。 4. 大量的社区资源:React 拥有庞大的社区,有很多优秀的组件、插件和工具可供使用。 React劣势包括: 1. 学习曲线较陡峭:相比传统的 DOM 操作,React 的编程模型有一定的学习曲线,需要一定的时间来熟悉。 2. 需要构建工具支持:React 应用需要使用构建工具进行打包和编译,这增加了开发成本。 React 的出现解决了传统的 DOM 操作的一些痛点,例如手动操作 DOM 很容易出错,而且性能较差,难以维护。React 使用虚拟 DOM 技术,可以快速更新页面上的元素,减少了浏览器的重绘和回流,提升了页面的性能。 虚拟 DOM 的优点包括: 1. 快速更新:虚拟 DOM 可以快速更新页面上的元素,减少了浏览器的重绘和回流,提升了页面的性能。 2. 跨平台支持:虚拟 DOM 不依赖于浏览器的实际 DOM,可以在不同的平台上使用,例如服务器端渲染、React Native 等。 虚拟 DOM 的缺点包括: 1. 需要额外的内存:虚拟 DOM 需要创建额外的数据结构来表示页面上的元素,这会占用一定的内存空间。 2. 初次渲染较慢:由于需要额外的数据结构来表示页面上的元素,虚拟 DOM 在初次渲染时会比直接操作实际 DOM 慢一些。 React Hooks 是 React 16.8 引入的新特性,它可以让函数组件拥有类组件的状态和生命周期管理能力。React Hooks 的优点包括: 1. 简化代码:使用 React Hooks 可以将状态管理和副作用的处理逻辑与 UI 逻辑分离,代码变得更加简洁。 2. 更好的可测试性:React Hooks 可以使组件的状态和副作用更容易进行单元测试。 3. 更好的复用性:使用 React Hooks 可以将组件的状态和副作用抽象为自定义 Hook,便于复用。 React Hooks 的劣势包括: 1. 学习曲线较陡峭:React Hooks 的使用需要一定的学习成本,需要理解 Hook 的实现原理和使用规则。 2. 不支持所有的生命周期:React Hooks 并不支持所有的生命周期,有些场景下需要使用类组件才能实现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值