作者选择Creative Commons接受捐赠,作为Write for DOnations计划的一部分。 介绍 在本教程中,您将学习三种不同的方式来设置React组件的样式:普通级联样式表 (CSS)、带有JavaScript 样式对象的内联样式和JSS,一个使用JavaScript创建 CSS 的库。这些选项各有优缺点,有些可以为您提供更多防止样式冲突的保护,或者允许您直接引用 props 或其他动态数据。但是所有选项都有一个共同点:它们让您将特定于组件的样式保持在组件附近,从而使组件更容易在一个项目中甚至在许多不相关的项目中重用。 这些选项中的每一个都依赖于 CSS 属性。要使用没有任何运行时数据的纯 CSS,您可以导入样式表。如果要创建与组件集成的样式,可以使用内联样式对象,这些对象使用 CSS 属性名称作为键,样式作为值。最后,如果你想要一个组合,你可以使用第三方库,比如 JSS,用 JavaScript 语法编写你的 CSS,这个软件概念被称为CSS-in-JS。 为了说明这些方法,您将构建一个示例alert组件,该组件将根据prop显示成功样式或错误样式。该alert组件将采用任意数量的子项。这意味着您需要对样式冲突保持谨慎,因为您无法知道子组件将具有什么样式。创建alert组件后,您将使用每个样式选项对其进行重构,以便您可以看到这些方法之间的异同。 先决条件 你需要一个运行Node.js的开发环境;本教程在 Node.js 版本 10.20.1 和 npm 版本 6.14.4 上进行了测试。要在 macOS 或 Ubuntu 18.04 上安装它,请按照如何在 macOS 上安装 Node.js 和创建本地开发环境或如何在 Ubuntu 18.04 上安装 Node.js 的使用 PPA 安装部分中的步骤进行操作。 您将需要能够使用Create React App创建应用程序。您可以在如何使用 Create React App设置 ..
Category : 教程系列
介绍 Ubuntu 操作系统的最新长期支持 (LTS) 版本 Ubuntu 20.04 (Focal Fossa) 于 2020 年 4 月 23 日发布。本指南将解释如何将 18.04 或更高版本的 Ubuntu 系统升级到 Ubuntu 20.04。 警告:与操作系统主要版本之间的几乎所有升级一样,此过程存在故障、数据丢失或软件配置损坏的固有风险。强烈建议进行全面备份和广泛测试。 为了避免这些问题,我们建议迁移到新的 Ubuntu 20.04 服务器而不是就地升级。升级时您可能仍需要查看软件配置的差异,但核心系统可能会具有更高的稳定性。您可以关注我们关于如何迁移到新 Linux 服务器的系列文章,以了解如何在服务器之间迁移。 先决条件 本指南假设您有一个 Ubuntu 18.04 或更高版本的系统,配置了启用 sudo 的非 root 用户。 潜在的陷阱 尽管许多系统都可以就地升级而不会发生事故,但通过从头开始安装发行版、在此过程中仔细测试配置服务以及将应用程序或用户数据作为单独的文件进行迁移,迁移到主要的新版本通常更安全、更可预测。步。 您不应该在没有首先针对临时环境中的升级测试所有部署的软件和服务的情况下升级生产系统。请记住,库、语言和系统服务可能已经发生了重大变化。在升级之前,请考虑阅读Focal Fossa 发行说明。 步骤 1 – 备份您的系统 在尝试对任何系统进行重大升级之前,您应该确保在升级出错时不会丢失数据。完成此操作的最佳方法是备份整个文件系统。否则,请确保您拥有用户主目录、任何自定义配置文件以及关系数据库等服务存储的数据的副本。 在 DigitalOcean Droplet 上,一种方法是关闭系统电源并拍摄快照(关闭电源可确保文件系统更加一致)。有关快照过程的更多详细信息,请参阅如何创建 Droplet快照。确认 Ubuntu 更新成功后,您可以删除快照,这样您就不再需要为其存储付费。 ..
下载完整的电子书! 理解 DOM — EPUB 格式的文档对象模型电子书 理解 DOM — PDF 格式的文档对象模型电子书 电子书简介 JavaScript 是事实上的 Web 编程语言,但该语言本身不包含任何用于处理输入/输出 (I/O) 的内置方法,例如图形显示和声音。取而代之的是,Web 浏览器提供了一个 API,用于在称为文档对象模型 (DOM) 的树结构中访问 HTML 文档。JavaScript 和 DOM 的结合使我们能够创建交互式动态网站。 许多现代框架,例如 React、Vue 和 Svelte,从开发人员那里抽象出了大部分 DOM,但框架也在底层使用了 DOM。JavaScript 库 jQuery 的创建也是为了更轻松地使用 DOM,但现代开发实践是直接使用 DOM。为了成为一名熟练的 Web 开发人员,深入了解 DOM 是什么以及如何使用它是必不可少的。本书的目标是提供对 DOM 的基本理解,并探索与 DOM 交互的最常见和最有用方法的示例。 本书基于DigitalOcean 社区中的理解 DOM教程系列。它涵盖的主题包括: DOM 和 DOM 树结构 如何访问、遍历和修改 DOM ..
介绍 IRB 是 Interactive Ruby 的缩写,是一种无需创建文件即可快速探索 Ruby 编程语言和测试代码的方法。IRB 是Read-Eval-Print Loop或REPL,这是许多现代编程语言提供的工具。要使用它,您需要启动irb可执行文件并在提示符下键入您的 Ruby 代码。IRB 评估您键入的代码并显示结果。 通过 IRB,您可以访问 Ruby 的所有内置功能,以及您安装的任何库或 gem。此外,您可以配置 IRB 以保存您的命令历史记录,甚至可以启用代码的自动完成功能。 在本教程中,您将使用 IRB 运行一些代码、检查其输出、引入外部库并自定义您的 IRB 会话。 启动和停止 IRB 如果您安装了Ruby,您将拥有 IRB。您可以在任何安装了 Ruby 的计算机上通过irb从命令行界面执行命令来启动它。 irb 您将收到 IRB 提示: IRB sessionirb(main):001:0> 该提示表明您正在运行 IRB,并且您执行的任何内容都将在main上下文中运行,这是 Ruby 程序的顶级默认上下文。它还显示一个行号。 注意:如果您已经使用 RVM 安装了 Ruby,您的提示可能看起来略有不同,而是显示版本号: IRB session from RVM2.4.0 :001 > 要获得本教程中显示的提示,请使用 irb –prompt inf-ruby. ..
一个ç ontent中号anagement小号ystem,或CMS,是一个软件应用程序,使用户能够创建,修改和发布数字内容和网站。 CMS 平台通常包括内置基础设施、编辑和发布功能,并允许用户创建和管理网站内容,而无需深入的技术知识。 流行的 CMS 工具包括 WordPress、Joomla 和Magento,每个工具都可以根据用户要求满足广泛或利基的内容管理需求。 有关内容管理系统的更多资源,请访问我们关于 CMS 主题和工具的完整资源列表。要练习使用 WordPress(网站项目最流行的内容管理系统之一),请访问在 Ubuntu 20.04 上使用 LAMP 安装 WordPress �..
介绍 Angular 的Meta 服务允许您meta根据应用程序中当前的活动路由获取或设置不同的标签。 注意: Angular Meta 服务可用于 Angular 4 及更高版本。 让我们回顾一下它的使用和可用的方法。 先决条件 如果你想跟随这篇文章,你需要: 对HTMLmeta元素有一定的了解。 对Angular 服务有一定的了解。 本教程已通过 Node v16.2.0、npmv7.15.1 和angularv12.0.3 验证。 使用addTag和addTags 使用 Meta 服务需要从@angular/platform-browser组件或服务中导入和注入它。 import { Meta } from ‘@angular/platform-browser’; 对于多个meta标签,您可以使用该addTags方法在同一个调用中将它们全部设置。 这是我们在meta加载组件时为 Twitter 卡片添加标签的示例: constructor(private meta: Meta) { this.meta.addTags([ { name: ‘twitter:card’, content: ‘summary_large_image’ }, { name: ‘twitter:site’, content: ‘@alligatorio’ }, // … ..
作者选择了公共利益软件 (SPI)来接受捐赠,作为Write for DOnations计划的一部分。 介绍 通常,基于 Linux 的服务器不会预装图形用户界面 (GUI)。每当您想在实例上运行 GUI 应用程序时,典型的解决方案是采用虚拟网络计算 (VNC)。不幸的是,VNC 解决方案可能缓慢且不安全;许多还需要大量的手动配置。相比之下,X2Go提供了一个可工作的“云桌面”,具有始终在线、可远程访问且易于扩展的计算系统以及快速网络的所有优势。与许多 VNC 解决方案相比,它也更灵敏、更安全。 在本教程中,您将使用 X2Go 创建一个可以远程访问的XFCE桌面环境。 本教程中描述的设置在以下情况下很有用: 您需要访问基于 Linux 的操作系统,并带有桌面环境,但无法将其安装在您的个人计算机上。 您在多个位置使用多个设备(例如,个人笔记本电脑、工作笔记本电脑),但想要一个具有相同工具、外观、文件和性能的持久工作环境。想象一下,您忘记随身携带工作笔记本电脑,或者它出现故障而您必须将其送去维修。由于远程桌面上的所有内容都保持不变,因此您无需重新安装您喜欢用来完成工作的整套实用程序。您只需登录到远程桌面,一切都会在那里,就像您离开时一样,无论您从什么设备登录。 您的 Internet 服务提供商为您提供的带宽非常少,但您需要访问数十或数百 GB 的数据。例如,您可以下载 100GB 的数据,利用服务器非常快的网络。由于服务器本身是使用带宽的服务器,因此您无需使用 Internet 服务提供商每月分配给您的配额。您只需为向您发送远程桌面图像所需的网络带宽付费,相比之下,这是非常小的。 长时间运行的作业会使您的本地计算机数小时或数天不可用。想象一下,您必须编译一个大型项目,这将在您的笔记本电脑上花费 8 小时。在您的项目编译期间,您将无法观看电影或做任何非常耗费资源的事情。但是,如果您在服务器上运行该作业,现在您的计算机可以自由执行其他任务。 您正在与一个团队一起工作,所有成员都可以拥有一台共用的共享计算机,他们可以访问这些计算机以在项目上进行协作。 先决条件 在开始本教程之前,您需要: 具有 2GB 或更多 RAM 的 CentOS 8 x64 实例。2GB 是最小的,但是如果您计划运行内存占用很大的应用程序,那么 4GB 或更多的服务器是理想的选择。如果您愿意,可以使用DigitalOcean Droplet。 具有sudo权限和 SSH 密钥的用户。按照本指南开始:使用 CentOS ..
作者选择了COVID-19 救济基金来接受捐赠,作为Write for DOnations计划的一部分。 介绍 防火墙可以说是抵御网络攻击的最重要的防线之一。从头开始配置防火墙的能力是一种授权技能,使管理员能够控制他们的网络。 Packet Filter (PF)是一个著名的防火墙应用程序,由安全驱动的OpenBSD项目在上游维护。它更准确地表示为包过滤工具,因此得名,并以其简单的语法、用户友好性和广泛的功能而闻名。默认情况下,PF 是有状态的防火墙,将有关连接的信息存储在状态表中,可出于分析目的访问该表。PF 是 FreeBSD 基础系统的一部分,并得到了强大的开发人员社区的支持。尽管 FreeBSD 和 OpenBSD 版本的 PF 在内核架构方面存在差异,但通常它们的语法是相似的。根据它们的复杂性,可以修改通用规则集,以相对较少的工作量来处理任一分布。 在本教程中,您将在带有 PF 的 FreeBSD 12.1 服务器上从头开始构建防火墙。您将设计可用作未来项目模板的基本规则集。您还将探索 PF 的一些高级功能,例如数据包卫生、暴力预防、监控和日志记录以及其他第三方工具。 先决条件 在开始本教程之前,您需要以下内容: 1G FreeBSD 12.1 服务器(ZFS或UFS)。您可以使用我们的如何开始使用 FreeBSD 教程来将您的服务器设置为您喜欢的配置。 FreeBSD 默认没有启用防火墙——定制是 FreeBSD 精神的标志。因此,当您第一次启动服务器时,您需要在配置 PF 时进行临时保护。如果您使用的是 DigitalOcean,则可以在启动服务器后立即启用云防火墙。有关配置云防火墙的说明,请参阅 DigitalOcean 的防火墙快速入门。如果您使用其他云提供商,请在开始之前确定获得即时保护的最快途径。无论您选择哪种方法,您的临时防火墙都必须只允许入站 SSH 流量,并且可以允许所有类型的出站流量。 第 1 步 – 建立您的初步规则集 您将通过起草初步规则集开始本教程,该规则集提供基本保护和从 Internet 访问关键服务的权限。此时,您有一个正在运行的 FreeBSD ..
介绍 在数学上,运算是对一个或多个称为操作数映射到输出值的值的计算。的操作者是映射到的操作数的输出值符号或标志。 一元运算是只有一个操作数的运算。该操作数出现在运算符之前或之后。 一元运算符比标准的 JavaScript 函数调用更有效。此外,一元运算符不能被覆盖,因此它们的功能是有保证的。 操作员 解释 一元加 ( +) 尝试将操作数转换为数字 一元否定 ( -) 尝试将操作数转换为数字并在之后取反 增量 ( ++) 在其操作数上加一 递减 ( –) 从其操作数减一 逻辑非 ( !) 转换为布尔值然后否定它 按位非 ( ~) 反转操作数中的所有位并返回一个数字 typeof 返回一个字符串,它是操作数的类型 delete 删除数组的特定索引或对象的特定属性 void 丢弃表达式的返回值。 在本文中,您将了解 JavaScript 中的所有一元运算符。 先决条件 如果你想跟随这篇文章,你需要: 对 JavaScript数据类型、变量、对象和函数有一定的了解。 一元加 ( +) 一元加号运算符 ( +) 在其操作数之前并计算其操作数,但如果尚未将其转换为数字,则会尝试将其转换为数字。 它可以将数字、布尔值(true和false)的所有字符串表示形式转换null为数字。数字将包括整数、浮点数、十六进制、科学(指数)表示法和Infinity. 如果操作数无法转换为数字,则一元加运算符将返回NaN。 这里有些例子: ..
介绍 创建动态且可重用的代码很重要。Don’t-Repeat-Yourself 规则或 DRY 是在 TypeScript 中编写代码时要遵循的重要原则。使用 TypeScript 别名将帮助您完成此任务。 在本教程中,您将重构使用字符串文字来包含别名的代码。您将能够使用和理解 TypeScript 别名。 先决条件 要成功完成本教程,您需要具备以下条件: 您的机器上安装了最新版本的 TypeScript。此如何设置新的 TypeScript 项目教程可以帮助您完成此操作。 对字符串字面量的理解。此文章打字稿字符串文字类型是一个伟大的地方开始。 第 1 步 – 使用字符串文字 字符串文字允许我们使用字符串作为类型。创建一个名为的变量pet,而不是将其设置为与字符串等传统类型相等,而是将其分配’cat’为类型: let pet: ‘cat’; 由于petis 的类型’cat’,它只需要 的值’cat’。任何其他值都会导致error: pet = ‘cat’; // Ok pet = ‘dog’; // Compiler error 在上面的代码片段中,赋值pet给’dog’会导致错误,因为 的唯一有效值pet是’cat’。 与联合类型一起使用时,字符串文字变得更加强大。联合类型用于定义可以是多种类型的值。对于联合类型,|字符用于分隔不同的可能类型: let pet: ‘cat’ | ‘dog’; 该pet变量现在可以采用’cat’或’dog’作为值。分配pet给任何其他字符串值将导致错误: pet = ‘cat’; // ..