02 2023 档案

摘要:Redux实现原理解析 为什么要用redux 在React中,数据在组件中是单向流动的,数据从一个方向父组件流向子组件(通过props),所以,两个非父子组件之间通信就相对麻烦,redux的出现就是为了解决state里面的数据问题 Redux设计理念 Redux是将整个应用状态存储到一个地方上称为s 阅读全文
posted @ 2023-02-28 08:11 beifeng11996 阅读(44) 评论(0) 推荐(0) 编辑
摘要:High Order Component(包装组件,后面简称HOC),是React开发中提高组件复用性的高级技巧。HOC并不是React的API,他是根据React的特性形成的一种开发模式。 HOC具体上就是一个接受组件作为参数并返回一个新的组件的方法 const EnhancedComponent 阅读全文
posted @ 2023-02-28 08:11 beifeng11996 阅读(13) 评论(0) 推荐(0) 编辑
摘要:用户不同权限 可以查看不同的页面 如何实现? Js方式 根据用户权限类型,把菜单配置成json, 没有权限的直接不显示 react-router 方式 在route 标签上 添加onEnter事件,进入路由之前替换到首页 <Route path="/home" component={App} onE 阅读全文
posted @ 2023-02-28 08:10 beifeng11996 阅读(174) 评论(0) 推荐(0) 编辑
摘要:Redux可是一个大名鼎鼎的库,很多地方都在用,我也用了几年了,今天这篇文章就是自己来实现一个Redux,以便于深入理解他的原理。我们还是老套路,从基本的用法入手,然后自己实现一个Redux来替代源码的NPM包,但是功能保持不变。本文只会实现Redux的核心库,跟其他库的配合使用,比如React-R 阅读全文
posted @ 2023-02-28 08:10 beifeng11996 阅读(14) 评论(0) 推荐(0) 编辑
摘要:提问:react项目中的JSX里,onChange={this.func.bind(this)}的写法,为什么要比非bind的func = () => {}的写法效率高? 声明: 由于本人水平有限,有考虑不周之处,或者出现错误的,请严格指出,小弟感激不尽。这是小弟第一篇文章,有啥潜规则不懂的,你们就 阅读全文
posted @ 2023-02-28 07:40 beifeng11996 阅读(9) 评论(0) 推荐(0) 编辑
摘要:React 性能优化 shouldCompoentUpdate pureComponent 自带shouldCompoentUpdate的浅比较优化 结合Immutable.js达到最优 为什么 useState 要使用数组而不是对象 useState 的用法: const [count, setC 阅读全文
posted @ 2023-02-27 09:38 beifeng11996 阅读(24) 评论(0) 推荐(0) 编辑
摘要:1.虚拟dom 原生的JS DOM操作非常消耗性能,而React把真实原生JS DOM转换成了JavaScript对象。这就是虚拟Dom(Virtual Dom) 每次数据更新后,重新计算虚拟Dom,并和上一次生成的虚拟dom进行对比,对发生变化的部分作批量更新。在此其中,React提供了compo 阅读全文
posted @ 2023-02-27 09:37 beifeng11996 阅读(74) 评论(0) 推荐(0) 编辑
摘要:说说你用react有什么坑点? 1. JSX做表达式判断时候,需要强转为boolean类型 如果不使用 !!b 进行强转数据类型,会在页面里面输出 0。 render() { const b = 0; return <div> { !!b && <div>这是一段文本</div> } </div> 阅读全文
posted @ 2023-02-27 09:37 beifeng11996 阅读(34) 评论(0) 推荐(0) 编辑
摘要:1、JSX 在React17之前,我们写React代码的时候都会去引入React,并且自己的代码中没有用到,这是为什么呢? 这是因为我们的 JSX 代码会被 Babel 编译为 React.createElement,我们来看一下babel的表示形式。 需要注意的是: 自定义组件时需要首字母用大写, 阅读全文
posted @ 2023-02-27 09:36 beifeng11996 阅读(32) 评论(0) 推荐(0) 编辑
摘要:react diff 算法 我们知道React会维护两个虚拟DOM,那么是如何来比较,如何来判断,做出最优的解呢?这就用到了diff算法 diff算法的作用 计算出Virtual DOM中真正变化的部分,并只针对该部分进行原生DOM操作,而非重新渲染整个页面。 传统diff算法 通过循环递归对节点进 阅读全文
posted @ 2023-02-26 16:55 beifeng11996 阅读(75) 评论(0) 推荐(0) 编辑
摘要:先来几个术语: | 官方 | 我的说法 | 对应代码 | | | | | | React element | React元素 | let element=<span>A爆了</span> | | Component | 组件 | class App extends React.Component { 阅读全文
posted @ 2023-02-26 16:54 beifeng11996 阅读(23) 评论(0) 推荐(0) 编辑
摘要:解释 React 中 render() 的目的。 每个React组件强制要求必须有一个 render()。它返回一个 React 元素,是原生 DOM 组件的表示。如果需要渲染多个 HTML 元素,则必须将它们组合在一个封闭标记内,例如 <form>、<group>、<div> 等。此函数必须保持纯 阅读全文
posted @ 2023-02-26 16:54 beifeng11996 阅读(91) 评论(0) 推荐(0) 编辑
摘要:一、写一个时钟 用 react 写一个每秒都可以更新一次的时钟 import React from 'react' import ReactDOM from 'react-dom' function tick() { let ele = <h1>{ new Date().toLocaleTimeSt 阅读全文
posted @ 2023-02-26 16:53 beifeng11996 阅读(28) 评论(0) 推荐(0) 编辑
摘要:React 高阶组件、Render props、hooks 有什么区别,为什么要不断迭代 这三者是目前react解决代码复用的主要方式: 高阶组件(HOC)是 React 中用于复用组件逻辑的一种高级技巧。HOC 自身不是 React API 的一部分,它是一种基于 React 的组合特性而形成的设 阅读全文
posted @ 2023-02-23 17:34 beifeng11996 阅读(57) 评论(0) 推荐(0) 编辑
摘要:一、React 渲染流程和更新流程 react渲染流程:jsx -> 虚拟dom -> 真实dom react更新流程:props/state改变 -> render函数重新执行 -> 生成新的虚拟dom树 -> 新旧虚拟dom树进行diff -> 计算出差异进行更新 ->更新到真实的dom树 所以 阅读全文
posted @ 2023-02-23 17:34 beifeng11996 阅读(20) 评论(0) 推荐(0) 编辑
摘要:展示组件(Presentational component)和容器组件(Container component)之间有何不同 展示组件关心组件看起来是什么。展示专门通过 props 接受数据和回调,并且几乎不会有自身的状态,但当展示组件拥有自身的状态时,通常也只关心 UI 状态而不是数据的状态。 容 阅读全文
posted @ 2023-02-23 17:32 beifeng11996 阅读(39) 评论(0) 推荐(0) 编辑
摘要:我们先看下 React 官方文档对这两个 hook 的介绍,建立个整体认识 useEffect(create, deps): 该 Hook 接收一个包含命令式、且可能有副作用代码的函数。在函数组件主体内(这里指在 React 渲染阶段)改变 DOM、添加订阅、设置定时器、记录日志以及执行其他包含副作 阅读全文
posted @ 2023-02-23 17:32 beifeng11996 阅读(9) 评论(0) 推荐(0) 编辑
摘要:react diff 算法 我们知道React会维护两个虚拟DOM,那么是如何来比较,如何来判断,做出最优的解呢?这就用到了diff算法 diff算法的作用 计算出Virtual DOM中真正变化的部分,并只针对该部分进行原生DOM操作,而非重新渲染整个页面。 传统diff算法 通过循环递归对节点进 阅读全文
posted @ 2023-02-21 10:01 beifeng11996 阅读(33) 评论(0) 推荐(0) 编辑
摘要:Debounce debounce 原意消除抖动,对于事件触发频繁的场景,只有最后由程序控制的事件是有效的。 防抖函数,我们需要做的是在一件事触发的时候设置一个定时器使事件延迟发生,在定时器期间事件再次触发的话则清除重置定时器,直到定时器到时仍不被清除,事件才真正发生。 const debounce 阅读全文
posted @ 2023-02-21 10:01 beifeng11996 阅读(46) 评论(0) 推荐(0) 编辑
摘要:react 强制刷新 component.forceUpdate() 一个不常用的生命周期方法, 它的作用就是强制刷新 官网解释如下 默认情况下,当组件的 state 或 props 发生变化时,组件将重新渲染。如果 render() 方法依赖于其他数据,则可以调用 forceUpdate() 强制 阅读全文
posted @ 2023-02-21 10:00 beifeng11996 阅读(25) 评论(0) 推荐(0) 编辑
摘要:Hook 简介 Hook出世之前React存在的问题 在组件之间复用状态逻辑很难 React 没有提供将可复用性行为“附加”到组件的途径(例如,把组件连接到 store)。有一些解决此类问题的方案,比如 render props 和 高阶组件。但是这类方案需要重新组织你的组件结构,这可能会很麻烦,使 阅读全文
posted @ 2023-02-21 09:59 beifeng11996 阅读(22) 评论(0) 推荐(0) 编辑
摘要:对 React 和 Vue 的理解,它们的异同 相似之处: 都将注意力集中保持在核心库,而将其他功能如路由和全局状态管理交给相关的库 都有自己的构建工具,能让你得到一个根据最佳实践设置的项目模板。 都使用了Virtual DOM(虚拟DOM)提高重绘性能 都有props的概念,允许组件间的数据传递 阅读全文
posted @ 2023-02-20 11:17 beifeng11996 阅读(20) 评论(0) 推荐(0) 编辑
摘要:mixin Mixin 设计模式 Mixin(混入)是一种通过扩展收集功能的方式,它本质上是将一个对象的属性拷贝到另一个对象上面去,可以拷贝多个属性到一个对象上,为了解决代码复用问题。 常用的方法:JQuery 的 extend 方法。 var LogMixin = { log: function( 阅读全文
posted @ 2023-02-20 11:17 beifeng11996 阅读(18) 评论(0) 推荐(0) 编辑
摘要:前言 所谓同构,简而言之就是,第一次访问后台服务时,后台直接把前端要显示的界面全部返回,而不是像 SPA 项目只渲染一个 <div id="root"></div> 剩下的都是靠 JavaScript 脚本去加载。这样一来可以大大减少首屏等待时间。 同构概念并不复杂,它也非项目必需品,但是探索它的原 阅读全文
posted @ 2023-02-20 11:15 beifeng11996 阅读(62) 评论(0) 推荐(0) 编辑
摘要:React 性能优化在哪个生命周期?它优化的原理是什么? react的父级组件的render函数重新渲染会引起子组件的render方法的重新渲染。但是,有的时候子组件的接受父组件的数据没有变动。子组件render的执行会影响性能,这时就可以使用shouldComponentUpdate来解决这个问题 阅读全文
posted @ 2023-02-19 09:44 beifeng11996 阅读(129) 评论(0) 推荐(0) 编辑
摘要:开发者普遍认为状态是组件的一部分, 但是同时却又在剥离状态上不停的造轮子, 这不是很矛盾么? 对于一个最简单的文本组件而言 function Text(){ const [text, setText] = useState('载入') return (){ <p>{text}</p> } } 你觉得 阅读全文
posted @ 2023-02-19 09:44 beifeng11996 阅读(28) 评论(0) 推荐(0) 编辑
摘要:hooks 为什么不能放在条件判断里 以 setState 为例,在 react 内部,每个组件(Fiber)的 hooks 都是以链表的形式存在 memoizeState 属性中 update 阶段,每次调用 setState,链表就会执行 next 向后移动一步。如果将 setState 写在条 阅读全文
posted @ 2023-02-19 09:43 beifeng11996 阅读(321) 评论(0) 推荐(0) 编辑
摘要:前言 最近一直在学习关于React方面的知识,并有幸正好得到一个机会将其用在了实际的项目中。所以我打算以博客的形式,将我在学习和开发(React)过程中遇到的问题记录下来。 这两天遇到了关于组件不必要的重复渲染问题,看了很多遍官方文档以及网上各位大大们的介绍,下面我会通过一些demo结合自己的理解进 阅读全文
posted @ 2023-02-19 09:42 beifeng11996 阅读(12) 评论(0) 推荐(0) 编辑
摘要:useEffect 与 useLayoutEffect 的区别 (1)共同点 运用效果: useEffect 与 useLayoutEffect 两者都是用于处理副作用,这些副作用包括改变 DOM、设置订阅、操作定时器等。在函数组件内部操作副作用是不被允许的,所以需要使用这两个函数去处理。 使用方式 阅读全文
posted @ 2023-02-14 09:34 beifeng11996 阅读(89) 评论(0) 推荐(0) 编辑
摘要:前言:最近接触到一种新的(对我个人而言)状态管理方式,它没有采用现有的开源库,如redux、mobx等,也没有使用传统的useContext,而是用useState + useEffect写了一个发布订阅者模式进行状态管理,这一点对我来说感觉比较新奇,以前从没接触过这种写法,于是决定研究一下目前比较 阅读全文
posted @ 2023-02-14 09:34 beifeng11996 阅读(9) 评论(0) 推荐(0) 编辑
摘要:如何解决 props 层级过深的问题 使用Context API:提供一种组件之间的状态共享,而不必通过显式组件树逐层传递props; 使用Redux等状态库。 react 实现一个全局的 dialog import React, { Component } from 'react'; import 阅读全文
posted @ 2023-02-14 09:26 beifeng11996 阅读(40) 评论(0) 推荐(0) 编辑
摘要:先来思考一个老生常谈的问题,setState是同步还是异步? 再深入思考一下,useState是同步还是异步呢? 我们来写几个 demo 试验一下。 先看 useState 同步和异步情况下,连续执行两个 useState 示例 function Component() { const [a, se 阅读全文
posted @ 2023-02-14 09:25 beifeng11996 阅读(67) 评论(0) 推荐(0) 编辑
摘要:概述下 React 中的事件处理逻辑 抹平浏览器差异,实现更好的跨平台。 避免垃圾回收,React 引入事件池,在事件池中获取或释放事件对象,避免频繁地去创建和销毁。 方便事件统一管理和事务机制。 为了解决跨浏览器兼容性问题,React 会将浏览器原生事件(Browser Native Event) 阅读全文
posted @ 2023-02-13 09:27 beifeng11996 阅读(25) 评论(0) 推荐(0) 编辑
摘要:第一次发文章 not only(虽然)版式可能有点烂 but also (但是)最后赋有手稿研究 finally看完他你有收获 diff算法:对于update的组件,他会将当前组件与该组件在上次更新是对应的Fiber节点比较,将比较的结果生成新的Fiber节点。 ! 为了防止概念混淆,强调 一个DO 阅读全文
posted @ 2023-02-13 09:26 beifeng11996 阅读(38) 评论(0) 推荐(0) 编辑
摘要:diff算法是怎么运作 每一种节点类型有自己的属性,也就是prop,每次进行diff的时候,react会先比较该节点类型,假如节点类型不一样,那么react会直接删除该节点,然后直接创建新的节点插入到其中,假如节点类型一样,那么会比较prop是否有更新,假如有prop不一样,那么react会判定该节 阅读全文
posted @ 2023-02-13 09:25 beifeng11996 阅读(17) 评论(0) 推荐(0) 编辑
摘要:前言 不知道大家有没有过这个疑问,React 中 setState() 为什么是异步的?我一度认为 setState() 是同步的,知道它是异步的之后很是困惑,甚至期待 React 能出一个 setStateSync() 之类的 API。同样有此疑问的还有 MobX 的作者 Michel Wests 阅读全文
posted @ 2023-02-13 09:25 beifeng11996 阅读(6) 评论(0) 推荐(0) 编辑
摘要:React中怎么检验props?验证props的目的是什么? React为我们提供了PropTypes以供验证使用。当我们向Props传入的数据无效(向Props传入的数据类型和验证的数据类型不符)就会在控制台发出警告信息。它可以避免随着应用越来越复杂从而出现的问题。并且,它还可以让程序变得更易读。 阅读全文
posted @ 2023-02-07 08:53 beifeng11996 阅读(43) 评论(0) 推荐(0) 编辑
摘要:High Order Component(包装组件,后面简称HOC),是React开发中提高组件复用性的高级技巧。HOC并不是React的API,他是根据React的特性形成的一种开发模式。 HOC具体上就是一个接受组件作为参数并返回一个新的组件的方法 const EnhancedComponent 阅读全文
posted @ 2023-02-07 08:52 beifeng11996 阅读(13) 评论(0) 推荐(0) 编辑
摘要:在生命周期中的哪一步你应该发起 AJAX 请求 我们应当将AJAX 请求放到 componentDidMount 函数中执行,主要原因有下 React 下一代调和算法 Fiber 会通过开始或停止渲染的方式优化应用性能,其会影响到 componentWillMount 的触发次数。对于 compon 阅读全文
posted @ 2023-02-07 08:51 beifeng11996 阅读(30) 评论(0) 推荐(0) 编辑
摘要:Redux可是一个大名鼎鼎的库,很多地方都在用,我也用了几年了,今天这篇文章就是自己来实现一个Redux,以便于深入理解他的原理。我们还是老套路,从基本的用法入手,然后自己实现一个Redux来替代源码的NPM包,但是功能保持不变。本文只会实现Redux的核心库,跟其他库的配合使用,比如React-R 阅读全文
posted @ 2023-02-07 08:51 beifeng11996 阅读(11) 评论(0) 推荐(0) 编辑
摘要:Dva工作原理 集成redux+redux-saga 工作原理 改变发生通常是通过用户交互行为或者浏览器行为(如路由跳转等)触发的,当此类行为会改变数据的时候可以通过 dispatch 发起一个 action,如果是同步行为会直接通过 Reducers 改变 State ,如果是异步行为(副作用)会 阅读全文
posted @ 2023-02-06 08:50 beifeng11996 阅读(24) 评论(0) 推荐(0) 编辑
摘要:性能优化 性能优化,永远是面试的重点,性能优化对于 React 更加重要 在页面中使用了setTimout()、addEventListener()等,要及时在componentWillUnmount()中销毁 使用异步组件 使用 React-loadable 动态加载组件 shouldCompon 阅读全文
posted @ 2023-02-06 08:49 beifeng11996 阅读(23) 评论(0) 推荐(0) 编辑
摘要:你理解“在React中,一切都是组件”这句话。 组件是 React 应用 UI 的构建块。这些组件将整个 UI 分成小的独立并可重用的部分。每个组件彼此独立,而不会影响 UI 的其余部分。 useEffect 与 useLayoutEffect 的区别 (1)共同点 运用效果: useEffect 阅读全文
posted @ 2023-02-06 08:44 beifeng11996 阅读(42) 评论(0) 推荐(0) 编辑
摘要:提问:react项目中的JSX里,onChange={this.func.bind(this)}的写法,为什么要比非bind的func = () => {}的写法效率高? 声明: 由于本人水平有限,有考虑不周之处,或者出现错误的,请严格指出,小弟感激不尽。这是小弟第一篇文章,有啥潜规则不懂的,你们就 阅读全文
posted @ 2023-02-06 08:44 beifeng11996 阅读(20) 评论(0) 推荐(0) 编辑