小编Dee*_*ple的帖子

阻止 useSWR 获取,直到调用 mutate()

我有一个 React 应用程序,它使用 SWR + Axios 进行数据获取(https://swr.vercel.app/docs/data-fetching)。问题是,我使用的自定义挂钩useSwr在初始化挂钩时最初会获取所有数据。我的目标是仅在调用时才获取mutate。目前,即使没有调用,初始提取也会发生mutate。关于如何实现我的目标有什么建议吗?

我的应用程序包含在 SWRConfig 中:

    <SWRConfig
      value={{
        fetcher,
      }}
    >
      <App/>
    </SWRConfig>
Run Code Online (Sandbox Code Playgroud)

fetcher 的描述如下:

const dataFetch = (url) => axios.get(url).then((res) => res.data);

function fetcher(...urls: string[]) {
  if (urls.length > 1) {
    return Promise.all(urls.map(dataFetch));
  }
  return dataFetch(urls);
}

Run Code Online (Sandbox Code Playgroud)

我的自定义钩子使用useSwr

import useSWR, { useSWRConfig } from "swr";

export function useCars(registrationPlates: number[]): ICars {
  const { mutate } = useSWRConfig();
  const { data: carData} = useSWR<Car[]>(
    carsToFetchUrls(registrationPlates),  // returns …
Run Code Online (Sandbox Code Playgroud)

reactjs swr

12
推荐指数
2
解决办法
9503
查看次数

使用SWR多次获取来填充数组

我在 React 中有一个组件需要一组用户。我可以使用 useUwr 一次获取一个用户,如下所示:

export function Hello(id: number) {
  const { data } = useSWR('/api/user/{id}', fetcher)

  return <div>hello {data.name}!</div>
}
Run Code Online (Sandbox Code Playgroud)

我现在需要的是一组用户,所以基本上:

var users = [];  
for(var i = 0; i < 100; i++) {
   const { data } = useSWR('/api/user/{i}', fetcher); 
   users.push(data);
}
Run Code Online (Sandbox Code Playgroud)

这种方法的问题是Error: Rendered more hooks than during the previous render.

我想一定有一种更智能的方法来获取 100 个用户的数据。感谢您的任何建议。

reactjs swr

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

Android Studio:将华为设备连接到 Android Studio 时遇到问题?

我是 Android Studio 新手,目前我正在尝试在我的设备(华为 P20 PRO)上运行 Android Studio 应用程序,但没有任何效果。Android Studio 未在 AVD 管理器中显示我的设备。

你能告诉我我错过了什么吗?

  • USB调试已开启

  • 驱动程序通过 HiSuite 安装(在设备管理器中:华为 HDB 接口) 注:Google USB 驱动程序通过 Android Studio 安装。

使用Android Studio 3.5

android driver android-studio huawei-mobile-services

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

如何使用 Jest 和 React 测试库测试输入的占位符

我使用搜索栏组件构建了一个简单的反应应用程序。搜索栏组件包含一个输入。为了进行测试,我使用 Jest 和 React 测试库。我想编写一个测试,测试当在输入的值中输入某些内容时,输入的占位符是否消失。

Searchbar.test.tsx

test("SearchBar placeholder gets replaced by search string", () => {
  const handleSearchRequest = jest.fn();
  render(<SearchBar searchInputValue="Hello World"/>);
  
  const searchInput = screen.getByPlaceholderText("Search");

  expect(searchInput).toBeFalsy();                  //test fails
  // expect(searchInput).not.toBeInTheDocument();   //test fails
  // expect(searchInput).toBeNull();                //test fails
});
Run Code Online (Sandbox Code Playgroud)

搜索栏.tsx

      <Input
        placeholder="Search"
        value={currentValue}
      />
Run Code Online (Sandbox Code Playgroud)

我应该如何编写这个测试有什么想法吗?

react-testing-library ts-jest

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

让单元测试等待异步获取填充的数据

useSWR我有一个单元测试,其中包括渲染用于获取数据的组件。但在调用之前数据尚未准备好,expect()因此测试失败。

test("StyleOptionDetails contains correct style option number", () => {
    renderWithMockSwr(
        <StyleOptionDetails
            {...mockIStyleOptionDetailsProps}
        />
    )
    expect(screen.getByText(123)).toBeInTheDocument();
});
Run Code Online (Sandbox Code Playgroud)

但如果我延迟setTimeout(),它就会通过测试。

setTimeout(() => {
    console.log('This will run after 2 second')
    expect(screen.getByText(123)).toBeInTheDocument();
}, 2000);
Run Code Online (Sandbox Code Playgroud)

创建延迟或等待数据的正确方法是什么?

unit-testing reactjs jestjs react-testing-library swr

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

样式未从后端解析

我有一个带有角度前端和 C# 后端的应用程序。我从我的应用程序的后端收到这个富文本:

<b>Hello <span style="font-weight:normal"> world </span></b>
Run Code Online (Sandbox Code Playgroud)

显示的是“ Hello world
我要显示的是“ Hello world”

所需的行为是跨度的样式不会被覆盖。此 codepen 示例显示了所需的行为,但仅限前端:https ://codepen.io/david-lo/pen/rNVOEbY

我错过了什么?

css text-styling angular

5
推荐指数
1
解决办法
128
查看次数

如何将大量数据插入ClickHouse DB?

我有一个正在运行的 ClickHouse 服务器实例,并且我已通过客户端成功连接到它。我正在使用 Tabix.io 来运行我的查询。我创建了一个数据库和一个名为“names”的表。我想在该表中输入很多随机生成的名称。我知道运行多个这样的命令:

insert into names (id, first_name, last_name) values (1, 'Stephana', 'Bromell');
insert into names (id, first_name, last_name) values (2, 'Babita', 'Leroux');
insert into names (id, first_name, last_name) values (3, 'Pace', 'Christofides');
...
insert into names (id, first_name, last_name) values (999, 'Ralph', 'Jackson');
Run Code Online (Sandbox Code Playgroud)

不受支持,因此仅执行第一个查询。换句话说,只有Stephana Bromell出现在“姓名”表中。

用于插入大量数据的 ClickHouse 替代方案是什么?

clickhouse

5
推荐指数
1
解决办法
5369
查看次数