首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

照方抓药 - 重构 React 组件的实用清单

主要概念 重构:在不改变外部行为的前提下,有条不紊地改善代码 依赖:A 组件的变化会影响 B 组件,就是 B 依赖于 A 耦合:耦合度就是组件之间的依赖性,要尽可能追求松耦合 副作用:除了返回值,还会修改全局变量或参数...纯函数:没有副作用,并针对相同的输入有相同的输出 Q: 为什么要优化、重构?...props 的 类型/结构 及是否必选 用 defaultProps 列出默认值 3.是否可以重用 相同/相似 的逻辑 重复的纯 逻辑/计算 可提取成工具方法,并用可选参数实现通用 涉及界面的重复可封装成通用组件...编写测试 针对重构后的组件,可以轻易编写单元测试了 若编写测试仍遇到问题,重复检查以上所有步骤 重构案例:秒杀商品详情弹窗 用一个小的例子来实践这份清单,虽然不可能每次重构都把上面的 checkbox...,根据条件有两种不同的渲染 根据 gradeRules 和 desc 渲染出了 2 个结构一样的代码段 根据“单一职责”和“重用”的原则,规划新的组件结构如下: 本组件( )应该只负责组合渲染大致框架

1.5K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    react面试应该准备哪些题目

    其实 React 本身并不强制使用 JSX。在没有 JSX 的时候,React 实现一个组件依赖于使用 React.createElement 函数。...因为 React 需要将组件转化为虚拟 DOM 树,所以在编写代码时,实际上是在手写一棵结构树。而XML 在树结构的描述上天生具有可读性强的优势。...总结: JSX 是一个 JavaScript 的语法扩展,结构类似 XML。JSX 主要用于声明 React 元素,但 React 中并不强制使用 JSX。...EMAScript6版本中,作用域是可以改变的。如何用 React构建( build)生产模式?...展示专门通过 props 接受数据和回调,并且几乎不会有自身的状态,但当展示组件拥有自身的状态时,通常也只关心 UI 状态而不是数据的状态。容器组件则更关心组件是如何运作的。

    1.7K60

    TDesign 组件库技术方案指北

    本篇会从从仓库目录结构开始,通盘分析 TDesign 的技术选型和原因。我们先来看一下 TDesign 组件库仓库的目录结构,帮助理解代码的整体结构。...JSX 开发带来的如下额外优势: Vue 等技术栈中的 Template 配合相关语法糖能使得开发体验比较接近原生 HTML,但对于组件这种本身具有高内聚、高灵活性的场景来说,JSX 是更合适的方案:...Template 对 TS 对支持不够完善,往往需要额外类型定义;在处理大量结构赋值或者条件判断时 Template 反而不如 JSX 直观。...除了白盒测试,还有黑盒测试,最常见的黑盒测试便是手工回归测试,这类测试是几乎所有项目都会进行的测试,此处不再赘述。...,为此我们也在进行 Vue2 与 Vue3 的融合重构方案。

    3.2K40

    你了解 Typescript 吗

    TypeScript比JavaScript更具开发效率,包括:静态类型检查、基于符号的导航、语句自动完成、代码重构等。 TS提供了类、模块和接口,更易于构建组件。...TypeScript 拥有很好的工具。 它提供了先进的自动补全功能,导航,以及重构。有这样的工具几乎是开发大型项目的必要条件。...基础类型 TypeScript支持与JavaScript几乎相同的数据类型,此外还提供了实用的枚举类型使用。...的时候可设为"es6",常设为"es5" "jsx": "preserve", // 保留jsx的处理,常用在使用jsx时 "module": "commonjs", "sourceMap": true...再也不怕经常性的调整接口,因为我们可以一键重构相同interface中的某字段。 接口的引入,使得我们对代码的抽象设计变得容易了,逻辑和架构也清晰了。 以上的这些这些,随着项目增大越发觉得舒服。

    5.6K10

    「前端架构」React,Angular还是Vue,太难选了?看完秒懂。

    render方法返回需要呈现的内容的描述,React有一种快速而聪明的方法将其应用于DOM。 这个框架是关于组件层次结构的单向数据流。子组件不知道它们的父组件,只接收来自它们的props 。...想象一下用它编写复杂的组件层次结构。你可以玩一下the online Babel compiler 来获得这个想法。 React团队非常关注API的稳定性。...它们维护有用的React DevTools,并尝试使框架抛出的警告真正有用。 在React 16.8中引入React钩子使得几乎整个应用程序都可以使用短功能组件。...对于新开发人员来说,加入不熟悉的项目更为自然,因为每个应用程序的结构几乎都是一样的。它还使得维护大型代码库更便宜、更高效。 与其他框架中的组件类似,模块允许代码重用和由不同的人甚至团队进行并行开发。...您不必设置复杂的构建过程来使用它,添加头脚本(如jQuery)应该可以让您快速入门。 Vue覆盖了MVVM架构模式的ViewModel层。

    6.3K40

    TDesign 在 vitest 的实践

    另一方面单元测试目前是 TD 发布正式版的一个卡点,所以准备对其进行一次梳理和重构,为后续的重点工作做准备。图片痛点与现状单元测试执行效率太低,上面已经讲到了,这个速度是无法忍受。...vitest 的特性如下:与 Vite 的配置、转换器、解析器和插件通用,免去了额外对 jest 的配置对 TypeScript / JSX 支持开箱即用的,像写组件一样写测试多线程通过 tinypool...watch 模式下极速热更,在单元测试开发时更友好与 Jest 几乎相同的 API,极少量的差异更清晰的 C8 生成测试覆盖率源码内联测试非常酷的 GUI图片图片迁移配置文件改造依赖,上面说到,vitest...button组件的单测vitest --config site/vite.config.js button#执行button的index.test.jsx测试文件vitest --config site...这样做影响单元测试的执行效率,对每个组件都开一个 describe, 这些代码会影响单元测试的代码结构。所以合并在一个文件执行是最合理的。其实现思路与ssr基本一致,只是 render 不一样而已。

    1.4K42

    React 之props属性

    React 里有一个非常常用的模式就是对组件做一层抽象。组件对外公开一个简单的属性(Props)来实现功能,但内部细节可能有非常复杂的实现。...可以使用 JSX 展开属性 来合并现有的 props 和其它值: return ; 如果不使用 JSX,可以使用一些对象辅助方法如...使用了 JSX 和 ES7 的还在试验阶段的特性。 手动传递 大部分情况下你应该显式地向下传递 props。这样可以确保只公开你认为是安全的内部 API 的子集。...这样做比传整个 this.props对象要好,因为更利于重构和语法检查。...这是 JSX 命令行工具 配合 --harmony 标记来启用 ES7 语法。 使用 Underscore 来传递 如果不使用 JSX,可以使用一些库来实现相同效果。

    86450

    【Vue进阶】手把手教你在 Vue 中使用 JSX

    的灵活性,同时又兼具 html 的语义化和直观性 为什么要在 Vue 中使用 JSX 有时候,我们使用渲染函数(render function)来抽象组件,渲染函数不是很清楚的参见官方文档[1],...Attributes 结构一样 render() { return } 注意,如果是动态属性,之前是 v-bind:...【Vue 进阶】从 slot 到无渲染组件[3] 我们来看下怎么使用 JSX 实现具名插槽和作用域插槽 具名插槽:父组件的写法和单文件组件模板的类似,通过 slot="header" 这样方式指定要插入的位置...[6] 前端应该知道的 HTTP 知识【金九银十必备】[7] 最强大的 CSS 布局 —— Grid 布局[8] 如何用 Typescript 写一个完整的 Vue 应用程序[9] 前端应该知道的web...[8] 最强大的 CSS 布局 —— Grid 布局: https://juejin.im/post/6854573220306255880 [9] 如何用 Typescript 写一个完整的 Vue

    4.7K20

    React—表单及事件处理

    更有可能我们是在对已有的项目进行重构,除了React之外还有一些别的库需要和表单交互,这时候使用非受控组件可能会更方便一些。...内部抽象出来的一种标签的写法,只是看起来一样而已,下面就介绍一下表单元素中,JSX和HTML不一样的,需要注意的地方。...在HTML中,textarea标签当中的内容都是在其开闭合标签之间的子节点当中的。而在JSX中,为了统一,textarea也可以定义一个名为value的属性,用来传入应用状态中的相关值。...,同样我们可以为JSX当中的select标签定义value属性,与应用状态中相关数据值相同的option将会被默认选中。...}> Activate Lasers React元素的事件属性几乎与HTML中的事件相关属性相同,不过在React当中,事件相关的属性是以小驼峰的方式命名的。

    1.4K30

    前端-框架之战

    我已经写出了两个几乎一样的Web应用,一个是基于Vue,另一个则基于React,可以方便你在看这篇文章的时候查找相关代码。...这是因为模板用的就是普通的HTML,通过Vue来整合现有的系统是比较容易的,不需要整体重构。同时Vue声称它更容易学习,我最近才接触Vue,能证明所言非虚。...不同于早期的JavaScript框架“功能齐全”,Reat与Vue只有框架的骨架,其他的功能如路由、状态管理等是框架分离的组件。...React也是非常相似的,JavaScript与JSX被写入同一个组件文件中。...相同之处在于,两个框架都专注于UI层,其他的功能如路由、状态管理等都交由同伴框架进行处理。 而不同之处是在于它们如何关联它们各自的配套框架。

    94920

    React全家桶与前端单元测试艺术|洞见

    TL;DR——什么是好的单元测试? 其实我是个标题党,单元测试根本没有“艺术”可言。 好的单元测试来自于好的代码,如果说有艺术,那也是代码的艺术。 注:以下“测试”一词,如非特指均为单元测试。...科学的单元划分可以让你摆脱mock,减少依赖,提高并行度,不依赖实现/易重构,提高测试对业务的覆盖率,以及易学易用,大幅减少测试代码。...推荐不写测试的项目尝试下,反正白送的测试……而且跟你写的没两样) 随着业务变得复杂,当state树变大时,我们可以将reducer结构继续往下抽,并继续传递事件,函数没有this,重构起来比普通OO要简单得多...另外更好的方式是用t.is(断言引用相同)而非t.deepEqual。...它以Virtual DOM的形式封装了恶心的浏览器基础设施,让我们以函数和数据结构来描述组件,所以和大部分框架不同,我们的测试依然可以在node上并行运行。

    1.1K72

    技术天地 | CSS-in-JS:一个充满争议的技术方案

    传统 CSS 在 FreeWheel 转型 React 过程中的痛点 FreeWheel的前端从十年前的巨型单体Rails应用,发展到如今的前后端分离、基于React组件化的前端单页应用,在CSS的重构和开发方面先后遇到过不少痛点...通过几年间的竞争,为了满足开发者的需求,同时结合社区的使用反馈,在不断的更新过程中,它们渐渐具有了几乎相同的 API,只是在内部实现上有所不同。 ?...不管是现有的主流方案还是新出现的方案,几乎在接口上使用同样的(或是一部分的)接口设计:CSS prop 与样式组件(styled components,与 styled-components 库名称相同...css prop 可以算是内联样式的升级版,用户定义的内联样式以 JSX 标签属性的方式与组件紧密结合,可以帮助用户快速迭代开发,让用户可以更快速的定位问题。...不过由于样式直接内嵌在JSX中,势必在一定程度上会影响组件代码的可读性。 样式组件更像是 CSS 的组件化封装,将样式抽象为语义化的标签,把样式从组件实现中分离出来,让 JSX 结构更“干净整洁”。

    2.6K40

    React核心技术浅析

    .同一类型的元素当元素的标签相同时, React保留此DOM节点, 仅对比和更新有改变的属性, 如className、title等, 然后递归对比其子节点.对于 style 属性, React会继续深入对比..., 仅更新有改变的属性, 如color、fontSize等.同一类型的组件当组件的props更新时, 组件实例保持不变, React调用组件的 componentWillReceiveProps() componentWillUpdate...于是就需要一个处于递归形式的虚拟DOM树上层的数据结构, 来辅助完成这些特性.这就是React16引入的重构后的算法核心——Fiber.3....Fiber从概念上来说, Fiber就是重构后的虚拟DOM节点, 一个Fiber就是一个JS对象.Fiber节点之间构成 单向链表 结构, 以实现前文提到的几个特性: 更新可暂停/恢复、可跳过、可设优先级...alternate: 本节点在相邻更新时的状态, 用于比较节点前后的变化, 3.3节详述组件信息tag: 组件创建类型, 如FunctionComponent、ClassComponent、HostComponent

    1.6K20

    React进阶

    = Diff,但是一般说调和(协调)就是指的 Diff 算法,因为 Diff 算法确实是调和过程最具代表性的一环 # Diff Diff 算法的设计思想: 若两个组件属于同一个类型,它们将拥有相同的 DOM...,将事件分发到具体的组件实例 React 合成事件在底层抹平了不同浏览器的差异,在上层面向开发者暴露统一的、稳定的、与 DOM 原生事件相同的事件接口,虽然合成事件并不是原生 DOM 事件,但也存了原生...state 时,它就是一个无状态组件,无状态组件也有一些别名,如 “容器组件”、“展示组件” 等,它最核心的的特点就是:把数据处理和页面渲染这两个工作剥离开来 说到底,React 组件做的事无非两件:...就 React 来说,无论是高阶组件,还是 Render Props,两者的出现都是为了弥补类组件在 “逻辑复用” 这个层面的不灵活性,然而两者都有一些无法解决的问题,如:嵌套地狱、较高的学习成本、props...React17 带来的新变化: 新的 JSX 转换逻辑 事件系统重构 Lane 模型的引入 在 React17 + 中: 编写 JSX 代码将不再需要手动导入 React 包,编译器会针对 JSX

    1.5K40

    Vue 3.4 来了!

    该版本包含一些实质性的内部改进-其中最显著的是重写了模板解析器,速度提高了 2 倍,还重构了反应性系统,使效果触发更准确、更高效。...@^5.0.0 (如果使用 Vite) nuxt@^3.9.0(如使用 Nuxt) vue-loader@^17.4.0(如使用 webpack 或 vue-cli) 如果在 Vue 中使用 TSX,请检查已删除...除 Vue 核心外,新解析器还将有利于提高 Volar / vue-tsc 以及需要解析 Vue SFC 或模板(如 Vue 宏)的社区插件的性能。...更高效的反应系统 上下文:PR#5912 [7] 3.4 还对反应系统进行了大量重构,目的是提高已计算属性的重新计算效率。...如果您的代码依赖于全局 JSX 命名空间的存在,例如使用 JSX.Element 等类型,您可以通过显式引用 vue/jsx 来保留与 3.4 之前完全相同的全局行为,该引用会注册全局 JSX 命名空间

    52410

    Vue 3.4 发布!

    该版本包含一些实质性的内部改进-其中最显著的是重写了模板解析器,速度提高了 2 倍,还重构了反应性系统,使效果触发更准确、更高效。...@^5.0.0 (如果使用 Vite) nuxt@^3.9.0(如使用 Nuxt) vue-loader@^17.4.0(如使用 webpack 或 vue-cli) 如果在 Vue 中使用 TSX,请检查已删除...除 Vue 核心外,新解析器还将有利于提高 Volar / vue-tsc 以及需要解析 Vue SFC 或模板(如 Vue 宏)的社区插件的性能。...更高效的反应系统 上下文:PR#5912 [7] 3.4 还对反应系统进行了大量重构,目的是提高已计算属性的重新计算效率。...如果您的代码依赖于全局 JSX 命名空间的存在,例如使用 JSX.Element 等类型,您可以通过显式引用 vue/jsx 来保留与 3.4 之前完全相同的全局行为,该引用会注册全局 JSX 命名空间

    58340

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券