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

我们弃用 Firebase 了

Firestore 的文档 / 集合架构:它迫使人们仔细考虑数据建模。它还反映了一个直观的导航方案。 Firestore 的关系数据也是如此。...也许不常见,但我们静态页面生成和调试 CDN 问题上遇到了限制。 Firestore 索引的创建速度非常缓慢,而且不优雅,比创建同等的 Algolia 索引花费的时间要长得多。...对于这个问题,K-Optional Software 几乎同一间收到了多个关于项目(不是我们的项目)的咨询请求,一切都表明,是 API 的突然变化造成了麻烦。... CI 代码,过滤掉未更改的文件,并部署与已更改的文件相对应的函数。不用说,这两种变通方法都有很多需要改进的地方。...为什么 Firebase Hosting 需要 Cloud Function list 授权,这让我很困惑。无论如何,Google Cloud Console 是添加此权限的唯一方法。

32.5K30

如何使用React和Firebase搭建一个实时聊天应用

2.安装Firebase和react-firebase-hookssrc文件夹下打开package.json文件,dependencies部分添加以下两行代码:"firebase": "^9.0.0...然后,终端运行以下命令来安装这两个依赖项:npm install firebase react-firebase-hooks3.使用Firebase Authenticationsrc文件夹下打开.../firebase";const firestore = firestore();然后,src文件夹下打开Chatbox.js文件,在其中导入firestore模块,并使用它来获取聊天室消息数据:import...))} );};export default Chatbox;这段代码使用了useEffect函数来组件挂载订阅...最后,它使用了一个表单来显示输入框和发送按钮,并使用Message组件来渲染每条消息的内容。这就是使用React和Firebasee搭建一个实时聊天应用的基本步骤和简单代码示例。

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

浅析 JavaScript 的事件委托

为什么要进行事件委托? 首先实现一个小功能:单击 HTML 的按钮后,把消息输出到控制台。...按钮列表被迭代为 for (const button of buttons) ,并且每个按钮都被附加了一个新的侦听器。另外在列表按钮添加或删除后,你必须还要手动删除或附加事件监听器。...'Body click event in capture phase'); }, true); 在这个 Codesandbox 演示[2]单击按钮,你可以控制台中查看事件的传播方式。...那么事件传播是怎样帮助捕获多个按钮事件的呢? 该算法很简单:把事件侦听器附加到按钮的父级,并在单击按钮捕获冒泡事件。这就是事件委托的工作方式。...该事件侦听器也会对按钮单击做出反应,因为按钮单击事件冒泡通过祖先元素(由于事件传播)。 步骤 3:用 event.target 选择目标元素 单击按钮,将会用event 对象参数调用处理函数。

2.6K30

【译】3条简单的React状态管理规则

state.count保存一个表示计数器的数字,例如,用户单击按钮的次数。...因此,由于组件应该只关心要呈现的元素和要附加的一些事件侦听器,所以应该将复杂的状态逻辑提取到自定义Hook。 让我们考虑一个管理产品列表的组件。用户可以添加新的产品名称。约束是产品名称必须唯一。...Add按钮将调用addNewProduct()事件处理程序。...单击添加按钮后,处理程序将调用dispatch({type:'add',name:newName})。调度添加操作使减速器uniqueReducer向状态添加新产品名称。...同样,单击“删除”按钮,处理程序将调用dispatch({type:'delete',name})。调度删除操作会将产品名称从名称状态删除。 4.总结 状态变量应该负责一个关注点。

2.1K40

怎样修复 Web 程序的内存泄漏

(当然,服务端渲染的网站也可能泄漏服务器端的内存。但是客户端泄漏内存的可能性很小,因为每次你页面之间导航浏览器都会清除内存。) Web 开发文献没有很好地解决内存泄漏问题的方法。...那么,为什么关于内存泄漏的文章这么少呢?我的猜测是: 缺乏抱怨:大多数用户在上网并未认真观察 Task Manager。...而且很可能所有与组件相关联的 DOM 节点也是如此。这会很快变得非常糟糕。...如果你设置了侦听器,但忘记了停止侦听,则任何用于设置侦听器的编程模型都可能造成内存泄漏。...当你点击“获取快照(take snapshot)”按钮,你已经捕获了该网页上特定 JavaScript VM 的所有活动对象。

3.1K30

3 个 React 状态管理的规则

React 组件内部的状态是渲染过程之间保持不变的封装数据。useState() 是 React hook,负责管理功能组件内部的状态。...创建 React hook 是为了将组件与复杂状态管理和副作用隔离开。因此,由于组件只应关注要渲染的元素和要附加的某些事件侦听器,所以应该把复杂的状态逻辑提取到自定义 hook 。...单击 Add 按钮,将调用 addNewProduct() 事件处理程序。 addNewProduct() 内部,用 Set 对象来保持产品名称唯一。组件是否应该关注这个实现细节?不需要。...当单击 Add 按钮,处理程序将调用 dispatch({ type: 'add', name: newName })。...以同样的方式,当单击 Delete 按钮,处理程序将调用 dispatch({ type: 'delete', name })。remove 操作将产品名称从名称状态删除。

1.7K00

Web 性能优化:缓存 React 事件来提高性能

这就是为什么这两个变量的等式检查没有通过的原因。它们的键值对可能完全相同,但是内存的地址不同,这才是会被比较的地方。...这里所发生的是,每当重新渲染 SomeComponent 组件(例如 do 从 true 切换到 false)按钮重新渲染,尽管每次 onClick 方法都是相同的,但是每次渲染都会被重新创建。...每次渲染,都会在内存创建一个新函数(因为它是 render 函数创建的),并将对内存中新地址的新引用传递给 ,虽然输入完全没有变化,该 Button 组件还是重新渲染。...,有一个可变数量的按钮,生成一个可变数量的事件监听器,每个监听器都有一个独特的函数,创建 SomeComponent 不可能知道它是什么。...因此,重新渲染 SomeComponent 不会导致按钮重新渲染。类似地,相似的, list 里面添加项也会为按钮动态地创建事件监听器。

2K20

我用 React 和 Vue 构建了同款应用,来看看哪里不一样(2020 版)

那么为什么 React 会费劲地将值与函数分开,还要使用 useState() 呢?这是因为当状态改变React 希望重新运行某些生命周期 Hooks。...我们的例子,当你调用 setName() React 知道有些状态已更改,所以可以运行它们的生命周期 Hooks。... React ,我们的输入字段有一个名为 value 的属性。每次通过 onChange 事件侦听器 更改它的值,都会自动更新此值。...handleInput 函数如下所示: const handleInput = (e) => { setToDo(e.target.value); }; 现在,每当用户按下页面上的 + 按钮添加新项目...怎样传递事件侦听器React: 针对简单事件(例如单击事件)的事件侦听器很好做。

4.8K30

JavaSwing_8.1:焦点事件及其监听器 - FocusEvent、FocusListener

当组件获得或失去键盘焦点,将调用侦听器对象的相关方法,并将FocusEvent传递给它。 API focusGained ? focusLost ? 2 FocusAdapter ?...当组件获得或失去键盘焦点,可调用侦听器对象的相关方法,并将 FocusEvent 传递给它。 API focusGained ? focusLost ?...3 如何编写焦点侦听器 每当组件获得或失去键盘焦点,就会触发焦点事件。无论是通过鼠标,键盘还是以编程方式发生焦点变化,都是如此。...注册每个组件上的焦点侦听器报告每个焦点获得和焦点丢失的事件。对于每个事件,将报告焦点更改涉及的其他组件,即相反的组件。...例如,当焦点从按钮转到文本字段按钮触发焦点丢失事件(文本字段为相反的组件),然后文本字段触发焦点获取事件(带有按钮作为相反的组件)。失去焦点以及获得焦点的事件可能是暂时的。

4.6K10

react面试题笔记整理

使用 Genymotion,首先需要在SDK的 platform-tools中加入环境变量,然后 Genymotion单击 Setting,选择ADB选项卡,单击 Use custom Android...SDK tools,浏览本地SDK的位置,单击OK按钮就可以了。...React refs 的作用是什么Refs 是 React 提供给我们的安全访问 DOM元素或者某个组件实例的句柄可以为元素添加ref属性然后回调函数接受该元素 DOM 树的句柄,该值作为回调函数的第一个参数返回...比较有趣的是,React 实际上并不将事件附加到子节点本身。React 使用单个事件侦听器侦听顶层的所有事件。这对性能有好处,也意味着 React 更新 DOM 不需要跟踪事件监听器。...使用 React Router,如何获取当前页面的路由或浏览器地址栏的地址?

2.7K30

React.memo() 和 useMemo() 的用法与区别

软件开发,我们通常痴迷于性能提升以及如何使我们的应用程序执行得更快,从而为用户提供更好的体验。 Memoization 是优化性能的方法之一。本文中,我们将探讨它在 React 的工作原理。...这确保了我们的应用程序运行得更快,因为我们通过返回一个已经存储在内存的值来避免重新执行函数需要的时间。 为什么 React 中使用 memoization?... React 函数组件,当组件的 props 发生变化时,默认情况下整个组件都会重新渲染。...想象一下,有一个组件显示数以千计的数据,每次用户单击一个按钮,该组件或树的每条数据都会在不需要更新重新渲染。...但是当我们单击 Force render 按钮,我们看到 memoizedValue 更新并且  组件重新渲染。

2.6K10

使用 useState 需要注意的 5 个问题

例如,我们创建了一个计数状态和一个附加到按钮的 handler 函数,该函数单击为状态添加 1(+1): import { useState } from "react"; function App...但是,直接更新状态是一种不好的做法,处理多个用户使用的实时应用程序时可能导致潜在的错误。为什么?因为与你所想的相反,React 不会在单击按钮立即更新状态。...然而,虽然预定的更新仍然处于暂挂的转换,但当前状态可能会被其他内容更改(例如多个用户的情况)。预定的更新将无法知道这个新事件,因为它只有单击按钮所获得的状态快照的记录。...这可能导致应用程序出现严重的错误和奇怪的行为。让我们通过添加另一个按钮来查看实际操作,该按钮延迟 2 秒后异步更新计数状态。...处理功能组件的状态,这是更新对象或数组的特定属性的理想方法。使用这个扩展操作符,你可以轻松地将现有项的属性解包到新项,同时修改或向解包项添加新属性。

4.9K20

为什么我的 Mac 运行缓慢以及如何使用CleanMyMac X修复它

本文中,我们将解释 MacBook 运行缓慢的原因,并为您提供十个神奇的修复方法,让您的 MacBook 恢复速度。开始吧! 为什么 Mac 运行缓慢? 浏览器对内存的要求越来越高。...我们保证您几乎立即看到速度的提高。 系统偏好设置 - 存储 快速修复:清理硬盘 可悲的是,这并不像听起来那么痛苦。清理旧电影文件、整理桌面以及 Mac 搜索旧文件都相对简单。...单击扫描。 扫描完成后,单击“清除”按钮以删除垃圾或单击“查看详细信息”以检查将删除哪些文件。全做完了! 3.... Safari 单击共享按钮 > 添加书签 > 添加。 CPU 使用率是密集型应用程序的主要指标。戒掉这些帮助你减少热量。...只需单击几下即可完成。只需按照以下步骤操作: 从主 Apple 菜单,转到系统设置 > 常规。 现在,选择登录项。 检查登录打开并在后台运行的内容,然后单击“—”按钮或通过切换切换器将其关闭。

2.6K30

React Native按钮详解|Touchable系列组件使用详解

尊重版权,未经授权不得转载 本文出自:贾鹏辉的技术博客(http://www.devio.org) 在做App开发过程离不了的需要用户交互,说到交互,我们首先会想到的就是按钮了,React...TouchableHighlight:TouchableWithoutFeedback的基础上添加了当按下背景变暗的效果。...在上面例子我们模拟了用户登录的效果,默认状态下按钮是可以响应用户点击事件的,正在登录过程我们通过disabled属性来禁用了按钮,这时无论是单击还是长按按钮都是没有任何响应的,停隔2s后,我们又将按钮解除禁用...在上述例子我们记录下用户单击按钮的时间戳,当单击结束后我们获取当前时间减去刚单击的时间,它们的差值就是用户单击按钮所用的时间了。...心得,通常情况下,当手指刚开始点击衬底显示。

4.1K70

JS 和 Node.js 的“事件驱动”是什么意思?

浏览器的主题和观察者 如果 HTML 元素是主题,那么谁是观察者?任何注册为侦听器的 JavaScript 函数都可以对浏览器的事件做出反应。...要测试代码请保存下面的 HTML 内容到文件(或在 Codepen 上尝试),请单击按钮,然后查看浏览器的控制台: <!... server 对象上,我们调用 on 方法来注册两个侦听器函数。...服务器启动后立即触发 listening 事件,而客户端连接到 127.0.0.1:8081 将触发 connection 事件(尝试一下!)。 在此示例,server 是事件发送器,主题。...JavaScript 中有关观察者/发布-订阅的其他示例 JavaScript 没有对观察者对象的原生支持,但是有人建议将其添加到语言中。

8.4K20

Jmeter(四) - 从入门到精通 - 创建网络测试计划(详解教程)

图1.7 JMeter变更页面的HTTP请求 1.5添加侦听器以查看存储测试结果 您需要添加到测试计划的最后一个元素是 Listener。...此元素负责将HTTP请求的所有结果存储文件,并提供数据的可视模型。 选择JMeter Users元素并添加一个Graph Results侦听器添加侦听器→后端侦听器)。...在网络浏览器,登录名将显示为用户名和密码的表单,以及用于提交表单的按钮。该按钮生成POST请求,将表单项的值作为参数传递。...设置提交按钮目标的路径。单击添加按钮两次,然后输入用户名和密码详细信息。有时,登录表单包含其他隐藏字段。这些也将需要添加。 ?...图1.8 示例HTTP登录请求 1.7选择同一用户或不同用户 创建测试计划每个线程组迭代,我们可以选择模拟运行多个迭代的同一用户,或模拟运行一个迭代的不同用户。

5K71

用纯 JavaScript 撸一个 MVC 框架

接着构造函数,我将为视图设置需要的所有东西: 应用程序的根元素 - #root 标题 h1 一个表单,输入框和提交按钮,用于添加待办事项 - form, input, button 待办事项清单...当你提交新的待办事项、单击删除按钮单击待办事项的复选框,将触发一个事件。视图必须侦听这些事件,因为它们是视图的用户输入,它会将响应事件所要做的工作分配给控制器。 我们将为事件创建 handler。...JavaScript ,当你单击复选框来切换它,会发出 change 事件。...现在我们可以将这些添加到视图的事件侦听器。当你 contenteditable 元素输入时,input 事件会被触发,离开contenteditable元素,focusout 触发。...,将进入“编辑”模式,这将会更新临时状态变量,当选中或单击待办事项,将会保存在模型并重置临时状态。

3.2K41
领券