我一直在学习/试验 React 钩子。当我在 Chrome 中使用 React DevTools 检查组件当前状态的值时,我看到状态很好,但实际的“字段”——即由各个useState钩子更新的状态变量——没有与它们相关的任何名称。相反,我看到的,例如,几个字符串,一对夫妇布尔值,等等。我一般都弄清楚是怎么回事,但是这似乎有问题-我希望能够看到其状态变量的名字是什么。
例如,如果我有类似的东西
const [doughnuts, setDoughnuts] = useState(24)
Run Code Online (Sandbox Code Playgroud)
当我查看 React DevTools 时,我希望看到类似“doughnuts: number : 24”的内容,而不仅仅是“number: 24”。
我是否错过了某处的一些设置,或者一些开启此功能的技巧?
我最近了解了Javascript 中的可选链,并在 React/NodeJS 项目中使用了它。效果很好。
我注意到我一直在将它与数组一起使用map,即使没有考虑太多——这似乎是一个自然的使用(这里items是一个数组,或者可能是undefined)
{items?.map(postListItem => ....
Run Code Online (Sandbox Code Playgroud)
也就是说,它将映射 ifexists items,但不会映射 if itemsis ,但如果我要调用undefined,它将避免任何运行时错误mapundefined
尽管如此,我不知道这是否是可接受的用途,或者我是否错误地使用了可选链。我寻找答案,但到目前为止还没有找到答案,这让我怀疑我使用不当。任何信息非常感谢!
我正在使用 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:没有重载与此调用匹配
越过 …
我正在学习 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) 我看到 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,但没有成功。
非常感谢任何见解和建议!
这是一个简单的问题,几乎可以肯定在某个地方的 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 如何协同工作,以及在何时何地发生了什么。
非常感谢任何帮助!
我正在尝试测试基于 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 之外,我的操作方式有什么变化吗?
显然正确的路线是选择上面的选项之一,但我有点“只见树木不见森林”,也就是说,由于我缺乏测试经验,我不知道哪个是正确的要遵循的路线。
感谢您提供任何线索。
我正在尝试在Pythonanywhere上设置一个Django应用程序 - 我已经设法找出Bitbucket并克隆代码 - 我删除了为我提供的目录中的文件 - 但无法让它工作.
我已经完成'syncdb',然后当我转到我认为应用程序的正确URL时,我不断收到"未处理的异常" - 错误是它无法在导入中找到'portfolio.settings'(组合是应用程序的名称)
我也不知道要为MEDIA_ROOT和STATIC_DIRS添加什么 - 据我所知,这些应该是完整路径,而不是相对路径.
我是一个Django新手,这证明是相当压倒性的,以获得在本地运行良好的应用程序,部署.提供的任何帮助(我没有找到Pythonanywhere论坛 - 似乎没有索引 - 或者帮助所有有用的,我害怕)
我还想:为什么我不让Pythonanywhere为我设置一个空白项目,但是我又不知道如何处理STATIC_DIRS和MEDIA_ROOT,我真的不知道如何使我的项目适合他们的设置.
谢谢你的帮助.
我正在学习 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) 我对 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) reactjs ×5
javascript ×3
typescript ×3
apollo ×2
jestjs ×2
node.js ×2
react-hooks ×2
unit-testing ×2
axios ×1
debugging ×1
django ×1
express ×1
next.js ×1
npm ×1
python ×1
yarnpkg ×1