小编Cer*_*ean的帖子

使用“useState”挂钩时,有什么方法可以使用 React DevTools 查看 React 多状态中的“字段”名称

我一直在学习/试验 React 钩子。当我在 Chrome 中使用 React DevTools 检查组件当前状态的值时,我看到状态很好,但实际的“字段”——即由各个useState钩子更新的状态变量——没有与它们相关的任何名称。相反,我看到的,例如,几个字符串,一对夫妇布尔值,等等。我一般都弄清楚是怎么回事,但是这似乎有问题-我希望能够看到其状态变量的名字是什么。

例如,如果我有类似的东西

const [doughnuts, setDoughnuts] = useState(24)
Run Code Online (Sandbox Code Playgroud)

当我查看 React DevTools 时,我希望看到类似“doughnuts: number : 24”的内容,而不仅仅是“number: 24”。

我是否错过了某处的一些设置,或者一些开启此功能的技巧?

reactjs react-hooks

23
推荐指数
5
解决办法
9249
查看次数

是否可以将可选链与数组和映射(在 Javascript 中)结合起来?

我最近了解了Javascript 中的可选链,并在 React/NodeJS 项目中使用了它。效果很好。

我注意到我一直在将它与数组一起使用map,即使没有考虑太多——这似乎是一个自然的使用(这里items是一个数组,或者可能是undefined)

        {items?.map(postListItem => ....
Run Code Online (Sandbox Code Playgroud)

也就是说,它将映射 ifexists items,但不会映射 if itemsis ,但如果我要调用undefined,它将避免任何运行时错误mapundefined

尽管如此,我不知道这是否是可接受的用途,或者我是否错误地使用了可选链。我寻找答案,但到目前为止还没有找到答案,这让我怀疑我使用不当。任何信息非常感谢!

javascript reactjs ecmascript-next

11
推荐指数
2
解决办法
1万
查看次数

使用 Jest 测试 TypeScript:“没有重载与此调用匹配”

我正在使用 Jest 测试 Apollo 服务器RESTDataSource。我的应用程序是用 TypeScript 编写的。我的类CDCDataSource扩展了抽象类RESTDataSource,它本身扩展了抽象类DataSource。 具有允许您从外部 REST 数据源提取数据的RESTDataSource方法。get我希望模拟这个方法,因为我希望模拟外部数据源。

  protected async get<TResult = any>(
    path: string,
    params?: URLSearchParamsInit,
    init?: RequestInit,
  ): Promise<TResult> {
    return this.fetch<TResult>(
      Object.assign({ method: 'GET', path, params }, init),
    );
  }
Run Code Online (Sandbox Code Playgroud)

然而,当我尝试使用 Jest 来模拟这个方法时spyOn——遵循这里的第二个答案:Jest:如何模拟类的一个特定方法——

import CDCDataSource from '../CDCDataSource';

test('Test', () => {
    let dataSource = new CDCDataSource();
    let spy = jest.spyOn(dataSource, 'get').mockImplementation(() => 'Hello');
    expect(dataSource.get()).toBe('Hello');


Run Code Online (Sandbox Code Playgroud)

但是,我收到 TypeScript 错误

TS2768:没有重载与此调用匹配

越过 …

unit-testing typescript apollo jestjs apollo-server

10
推荐指数
1
解决办法
2万
查看次数

使用 Axios 从 Express 应用程序返回流 - “提供的值‘流’不是 XMLHttpRequestResponseType 类型的有效枚举值。”

我正在学习 Node、Express 和 React,并尝试将用于调用 Express API 的简单通用 Fetch 方法转换为 Axios。当我希望 Axios 自动将结果作为 JSON 数据返回时,我已经让 Axios 工作了,但在这里我希望它返回一个ReadableStream. 从文档来看,它应该很简单:只需将字段添加到responseType:'stream'但config我不断收到错误The provided value 'stream' is not a valid enum value of type XMLHttpRequestResponseType. 我看到其他人也遇到了这个问题(请参阅https://github.com/axios/axios/issues/1474)但我没有没有看到任何解决方案。有谁知道是否有,或者我是否做错了什么?相关代码如下。感谢您的任何见解!

const logic = {

 _call(path, method, headers, body, expectedStatus) {
        const config = { method,responseType:'stream', url: `http://localhost:8080/${path}`}

        if (headers) config.headers = headers
        if (body) config.data = body

        return axios( config)
            .then(res => {
                if (res.status === expectedStatus) {
                    return res
                } …
Run Code Online (Sandbox Code Playgroud)

node.js express axios

8
推荐指数
1
解决办法
5201
查看次数

Yarn(实际上)所说的“警告模式 [“debug@^4.1.1”] 正在尝试在同一目的地解包”是什么意思?

我看到 Stack Overflow 上还有关于 Yarn 警告的其他问题,但我找不到它的含义的答案 - 我的意思是,它的真正含义是什么。也就是说,这对我和我的应用程序意味着什么,我该如何纠正它?

我正在尝试使用 Yarn添加调试yarn add debug -D,即我收到警告

warning Pattern ["debug@^4.1.1"] is trying to unpack in the same destination "/Users/xyz/Library/Caches/Yarn/v4/npm-debug-4.1.1-3b72260255109c6b589cee050f1d516139664791/node_modules/debug" as pattern ["debug@^4.1.0","debug@^4.0.1"]. This could result in non-deterministic behavior, skipping.
Run Code Online (Sandbox Code Playgroud)

我yarn remove debug随后尝试了yarn add debug -D,但没有成功。

非常感谢任何见解和建议!

debugging node.js npm yarnpkg

8
推荐指数
1
解决办法
8005
查看次数

在 NextJS SSR 过程中何时以及如何调用 React 生命周期方法?

这是一个简单的问题,几乎可以肯定在某个地方的 NextJS 文档中得到了回答,但是经过查找(以及谷歌搜索有关它的一些文章)我找不到它。

据我了解,NextJS 是这样工作的:

  • 如果您从“外部” URL 到达您的应用程序,即不是通过Link,那么该页面是 SSR 的,并且 NextJS 将 HTML 与 JS(NextJS 框架、React 等)的组合发送到浏览器。这个 HTML 是通过 React 在服务器上生成的。

  • 在服务器上getInitialProps调用SSR 期间,(我假设)通过以下方式将初始数据传递给 SSR 进程props

  • 然后调用 React 生命周期方法(componentDidMount/ useEffect)。应用程序仍然可以通过 访问初始数据props。据我了解,这些生命周期方法是在客户端上调用的——这就是我console.log告诉我的——因此你可以保证访问诸如localStorage.

  • 但这是否意味着在原始SSR之后在客户端有第二次渲染,即原始交付的HTML被SPA替换?

  • 或者是否保留了原始 SSR 内容,但 NextJS 以某种方式“直接”调用了 React 生命周期方法?

部分问题是我对 React 内部如何工作一无所知——屏幕绘制和生命周期方法彼此之间有什么关系。

我试图了解 NextJS 是如何工作的——流程到底是什么,NextJS 的 SSR 和 React 如何协同工作,以及在何时何地发生了什么。

非常感谢任何帮助!

javascript reactjs server-side-rendering next.js

8
推荐指数
1
解决办法
2469
查看次数

您如何模拟 Apollo Server RESTDataSource 以使用 Jest 进行单元测试?

我正在尝试测试基于 Apollo Server 的 Apollo Server 中的数据源RESTDataSource(https://www.apollographql.com/docs/apollo-server/data/data-sources/#rest-data-source)。我正在尝试使用 Jest 对其进行测试。该类具有从外部 REST API 以及从调用第二个 API 的另一个模块中提取数据的方法(因此这RESTDataSource最终取决于两个外部 API,其中一个在此处直接调用,一个在此处间接调用) )。

我不是测试专家,我不清楚如何模拟外部 API。GraphQL Tools 有一些工具可以让你模拟你的服务器,但我不确定那是我想要的。或者我应该使用Jest 的方法来模拟ES6 类,忘记这是一个 GraphQL 服务器?如果是这样,由于我正在使用 a class,我是否只是使用类似于模拟方法的方法来模拟MyClass.myMethod方法?

如果我使用的是 TypeScript(我就是),除了设置 Jest 以使用 TypeScript 之外,我的操作方式有什么变化吗?

显然正确的路线是选择上面的选项之一,但我有点“只见树木不见森林”,也就是说,由于我缺乏测试经验,我不知道哪个是正确的要遵循的路线。

感谢您提供任何线索。

unit-testing typescript apollo jestjs apollo-server

8
推荐指数
1
解决办法
1456
查看次数

如何将Django项目迁移到Pythonanywhere

我正在尝试在Pythonanywhere上设置一个Django应用程序 - 我已经设法找出Bitbucket并克隆代码 - 我删除了为我提供的目录中的文件 - 但无法让它工作.

我已经完成'syncdb',然后当我转到我认为应用程序的正确URL时,我不断收到"未处理的异常" - 错误是它无法在导入中找到'portfolio.settings'(组合是应用程序的名称)

我也不知道要为MEDIA_ROOT和STATIC_DIRS添加什么 - 据我所知,这些应该是完整路径,而不是相对路径.

我是一个Django新手,这证明是相当压倒性的,以获得在本地运行良好的应用程序,部署.提供的任何帮助(我没有找到Pythonanywhere论坛 - 似乎没有索引 - 或者帮助所有有用的,我害怕)

我还想:为什么我不让Pythonanywhere为我设置一个空白项目,但是我又不知道如何处理STATIC_DIRS和MEDIA_ROOT,我真的不知道如何使我的项目适合他们的设置.

谢谢你的帮助.

python django pythonanywhere

7
推荐指数
1
解决办法
3126
查看次数

React 中的错误边界:为什么 'throw new Error('some message')' 失败而 'throw errorObj' 工作?

我正在学习 React 中的错误边界。我想我已经有了很好的基本理解,但是在为异步过程(例如加载数据)实现它们时遇到了麻烦。

假设我有一个简单的组件,它使用 React 钩子从远程 API 加载一些数据。由于错误边界本身不会使用异步进程工作,而不是在 中抛出错误catch,该组件存储errorinstate并在下一次重新渲染时抛出它

// MovieDb.js
import axios from "axios"
import {useEffect,useState} from 'react'

export default (query) => {

  const [movies, setMovies] = useState([])
  const [error,setError] = useState(null)

  if (error) throw error

  useEffect(() => {
    const getData = async () => {
      try {
        const results = await axios.get('https://api.themoviedb.org/3/search/movie', {
          params: {
            api_key: 'somethingsomething',
            query
          }
        })
        setMovies(results.data.results)
      } catch (e) {
       setError(e)
      }
    }
    getData()
  }, [query])

  return …
Run Code Online (Sandbox Code Playgroud)

javascript error-handling reactjs react-hooks

7
推荐指数
1
解决办法
8144
查看次数

TypeScript:“Window &amp; typeof globalThis”上不存在属性“X”:使用“declare global”的建议解决方案给了我错误

编辑:这是一个 ESlint 问题。我在这篇文章的末尾包含了我的 ESLint 设置。

我对 TypeScript 还很陌生——我一直在重构别人的 React 代码,当我遇到这一行时,将其移至 TypeScript 以用于工作项目

        const memoryOptionsResponse = window.webchatMethods.getMemory(chatId);
Run Code Online (Sandbox Code Playgroud)

TypeScript 抱怨“window.webchat”,说

“Window & typeof globalThis”上不存在属性“X”

经过一番谷歌搜索后,答案似乎是将其放在模块的根级别

declare global {
    interface Window {
        webchatMethods:any;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是现在 TS 抱怨以下错误。

这个 Stack Overflow 页面建议了一些类似的东西,但它再次declare global和 ESLint 犹豫不决。

在尝试解决这个问题半小时后,我决定向您寻求建议——如果有人知道一个好的解决方案,我将不胜感激!

在此处输入图片说明

// .eslintconfig
{
  "parser": "babel-eslint",
  "parserOptions": {
    "ecmaVersion": 2020,
    "sourceType": "module",
    "ecmaFeatures": {
      "jsx": true,
      "modules": true
    }
  },
  "extends": [
    "eslint:recommended",
    "prettier",
    "plugin:react/recommended"
  ],
  "plugins": [
    "prettier",
    "react",
    "react-hooks"
  ],
  "env": …
Run Code Online (Sandbox Code Playgroud)

typescript reactjs

7
推荐指数
1
解决办法
3344
查看次数