React Hooks 中 API 路径的错误边界

error boundary for an api path in react hooks

提问人:zi zi 提问时间:10/26/2023 最后编辑:Drew Reesezi zi 更新时间:10/26/2023 访问量:34

问:

我正在尝试学习错误边界,因此我更改了 url 路径并包含错误边界包并在外面添加了该组件,但我仍然没有看到错误消息 你能告诉我如何解决它吗?在下面提供代码和小提琴。我用谷歌搜索了一下,但仍然没有运气。

索引 .js

import React, { StrictMode } from 'react';
import { createRoot } from 'react-dom/client';
import { ErrorBoundary } from 'react-error-boundary';

import App from './App';

const rootElement = document.getElementById('root');
const root = createRoot(rootElement);

root.render(
  <StrictMode>
    <ErrorBoundary fallback={<div>Something went wrong</div>}>
      <App />
    </ErrorBoundary>
  </StrictMode>
);

使用提取

import { useState, useEffect } from 'react';

const useFetch = (url) => {
  const [data, setData] = useState(null);

  useEffect(() => {
    fetch(url)
      .then((res) => res.json())
      .then((data) => setData(data));
  }, [url]);

  return [data];
};

export default useFetch;

应用程序

import React from 'react';
import { useState, useEffect } from 'react';
import './style.css';
import useFetch from './useFetch';

export default function App() {
  const [data] = useFetch('https://jsonplaceholder.typicode.com/todos/ddd');

  return (
    <div>
      {data &&
        data.map((item) => {
          return <p key={item.id}> {item.title}</p>;
        })}

      <h1>Hello StackBlitz!</h1>
      <p>Start editing to see some magic happen :)</p>
    </div>
  );
}

https://stackblitz.com/edit/react-6tdyn9?file=src%2Findex.js,src%2FuseFetch.js,src%2FApp.js

JavaScript ReactJS 错误处理

评论

0赞 Drew Reese 10/26/2023
您期望错误边界捕获的抛出的呈现错误是什么?
0赞 zi zi 10/26/2023
@DrewReese感谢您的回复。我很困惑,我以为这是--->出现问题时它会在 UI 中显示的错误。你能在我的stackblitz中更新如何捕获错误吗?我正在尝试学习
0赞 Drew Reese 10/26/2023
我从来都不太喜欢堆栈闪电战。我认为它的呈现方式也使得很难看到你的代码是否真正工作。下面是在 codesandbox 中运行的相同代码。当它实际上是一个对象时,我可以看到尝试渲染为数组的错误。“Something went wrong”被呈现给 DOM。data
0赞 zi zi 10/26/2023
你能告诉我你做了什么改变吗,因为对我来说,我在 codesandbox 中没有看到任何输出
0赞 Drew Reese 10/26/2023
我没有进行任何更改,只是将代码复制/粘贴到代码沙箱中。您在我链接到您的沙盒中看到了什么?

答:

0赞 Drew Reese 10/26/2023 #1

代码实际上没有任何错误或不正确,它完全按照预期工作。

然而,stackblitz 似乎正在奇怪地处理渲染 React 错误边界覆盖,而实际发生的事情根本不明显。

enter image description here

通常,当渲染 React 错误边界时,React 会渲染/显示一个包含错误的整页过度 UI、错误发生位置周围的代码片段、简短的堆栈跟踪以及右上角的按钮以消除覆盖。

编辑 error-boundary-for-an-api-path-in-react-hooks

enter image description here

请注意,叠加层是半透明的,您实际上可以阅读其后面的“出了点问题”文本。关闭此覆盖层将生成呈现的回退 UI。

enter image description here

另请注意,此覆盖仅在非生产版本中显示,例如在开发应用程序时。

此屏幕仅在开发中可见。如果 应用在生产环境中崩溃。 打开浏览器的开发者控制台以进一步检查此错误。

如果在生产版本中呈现 UI 时引发错误并被错误边界捕获,用户将直接看到呈现的回退 UI。