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

使用 react Context API 的正确姿势

本文介绍一下 React 中常见的 Context API 的使用方式。在使用 Context API 之前,我们还需要知道为啥要使用。...首先要引入 React 内置的 React Context API ? 最后创建 consumer ? 创建 Provider 增加一个名为 ToggleContext.js 的文件作为上下文?...,里头定义一系列需要跨层级使用的 state 和 function 1import React, { createContext } from 'react' 2 3// 1....,直接导出 Context.Consumer 给外部使用即可 使用 Provider ToggleProvider 组件包装了一系列共享的状态,为了使用这些组件的状态,我们直接将其添加到 App 组件中...如果组件内部有其他多个组件,这些组件都可以共享 Provider 提供的 state 使用 Consumer 通过 Consumer 直接使用 props 传递的 state 属性在 render 函数中渲染即可

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

    用Jest来给React完成一次妙不可言的~单元测试

    本篇文章主要围绕着React组件单元测试展开的,其目的是为了让开发人员可以站在使用者的角度考虑问题。通过测试的手段,确保组件的每一个功能都可以正常的运行,关注质量,而不是让用户来帮你测试。...技术栈选择 当我们想要为 React 应用编写单元测试的时候,官方推荐是使用 React Testing Library[1] + Jest[2] 的方式。...下面让我们看一个简单的计数器的例子,以及两个相应的测试:第一个是使用 Enzyme[4] 编写的,第二个是使用 React Testing Library[5] 编写的。...当我们点击按钮时,测试计数器的增减是否正确: import React from 'react'; import "@testing-library/jest-dom/extend-expect"; import...Library: https://testing-library.com/docs/react-testing-library/intro [2] Jest: https://jestjs.io/ [

    15K33

    CJSX试用 – 使用React靠谱的新姿势

    React魔改了一番JS,使其能在JS代码中直接插入HTML代码,这样魔改之后的JS叫做JSX。本文对JSX就不做过多的赘述了,我们直接来说CoffeeScript版本的“JSX”——CJSX。...虽然说是新姿势,不过其实cjsx已经有一段时间了。不过接下来,我先不介绍CJSX,先行介绍一些的其他的在React中使用CoffeeScript的姿势。...react-coffee 为了让CoffeeScript能舒服的用上React,最简单的方法莫过于把React DOM封装成一个库,然后直接调用。...这么做的不止coffee-react一家,不过coffee-react挺具有代表性的,所以我们就拿他来说。以及这个名字和我们主要要介绍的那个库很像,不要搞错了!...) 不评论风格美丑,但是要论优雅程度,我觉得还差那么点w coffee-react 这篇文章的主角就是这个了。

    67720

    【译】使用Enzyme和React Testing Library测试React Hooks

    如果你第一次使用Enzyme,我们之前发布过关于它的文章,《Enzyme如何在React应用中与Jest一起使用》。我们可以用他们来深入测试React Hooks。...使用react-testing-library测试 我们将为此写三个测试: 1、初始待办事项的渲染 2、我们可以加一个新的待办事项 3、我们可以删除一个待办事项 首先,我们安装需要的安装包: npm install...--save-dev @testing-library/jest-dom @testing-library/react 接下来,我们可以导入安装包和文件: import React from "react..."; import { render, fireEvent } from "@testing-library/react"; import Todo from ".....加油写面向对象的React代码! React钩子和应用中的其他钩子一样容易出错,你要确保你能很好地使用它们。正如我们刚才看到的,有几种方法可以做到这一点。

    4.1K30

    React 16.8发布了

    hooks 可以让你在不编写类的情况下使用 state 和 React 的其他功能。你还可以构建自己的 hooks,在组件之间共享可重用的有状态逻辑。...相反,可以在一些新组件中尝试使用 hooks,并让我们知道你的想法。使用 hooks 的代码仍然可以与使用类的现有代码并存。 从今天起就可以使用 hooks 了吗? 是的!...如果你愿意,应该可以在大部分新代码中使用 hooks。 在 hooks 还处于 alpha 状态的时候,React 社区就已经使用 hooks 为动画、表单、订阅、与其他库集成等创建了很多有趣的示例。...测试库也可以用它来包装它们的 API(例如,react-testing-library 的 render 和 fireEvent 就是这样做的)。...为了减少样板代码,我们建议使用 react-testing-library(https://git.io/react-testing-library),你可以像最终用户使用组件那样对组件进行测试。

    1.6K10

    React v16.8: The One With Hooks

    使用 Hook 的代码将与使用 class 的现有代码一起工作。 我今天可以使用 Hook 吗? {#can-i-use-hooks-today} 当然可以!...我们强烈建议启用一个新的名为 eslint-plugin-react-hooks 的 lint 规则来执行使用 Hook 的最佳实践。它将很快被默认包含在 Create React App。...如果需要,你应该能够在编写的大多数新代码中使用 Hook。 即使 Hook 在 alpha 版时,React 社区也创建了许多使用 Hook 有趣的示例和技巧,如:动画,表单,订阅,与其他库集成等等。...测试库也可以使用它包装 API(例如,react-testing-library 的 render 和 fireEvent 工具来执行此操作)。...为了减少样板代码,我们建议使用 react-testing-library,它旨在鼓励编写像最终用户那样使用组件的测试。

    90300

    前端测试体系建设与最佳实践总结

    因为我们的项目使用的是 React 技术栈,这里主要介绍 React 项目的技术选型和使用。 单元测试 ? Mocha 是生态最好,使用最广泛的单测框架,但是他需要较多的配置来实现它的高扩展性。...Augular 的默认测试框架就是 Karma + Jasmine,而 React 的默认测试框架是 Jest. Jest 被各种 React 应用推荐和使用。...UI 测试 UI 测试尽管有官方的测试框架 ReactTestUtils 和 Test Render,但是它们的 API 比较复杂,官方文档也是推荐使用 react-testing-library 或...import React from 'react'; import { render, cleanup, fireEvent } from '@testing-library/react'; import...import React from 'react'; import { render, cleanup } from '@testing-library/react'; import Toast from

    5.4K30

    搞懂了,React 中原来要这样测试自定义 Hooks

    本文中,我们将探索如何使用 React Testing Library 测试库来测试自定义钩子。 如何测试 React 组件 开始前,首先让我们回顾一下如何测试一个基本的 React 组件。...使用 screen 对象获取 DOM 元素(可以使用 ByRole 来查询元素)。 使用 @testing-library/user-event 库模拟用户事件。 对呈现的输出进行断言。...以下测试中,我们依据上述的步骤来验证 Counter 组件的功能: import { render, screen } from '@testing-library/react' import { Counter...使用 renderHook() 测试自定义 Hooks 要在 React 中测试自定义钩子,我们可以使用 React Testing Library 测试库提供的 renderHook() 函数。...总结 当使用 React Testing Library 测试自定义钩子时,我们使用 renderHook() 函数来渲染我们的自定义钩子,并验证它是否返回预期的值。

    43840
    领券