小编und*_*ood的帖子

在 Jest 中模拟导入函数

我有一个案例:

test.js

import { today } from "utils/date";
import myFunction from "helpers/myFunction";

it('should work properly', () => {
   jest.mock('utils/date', () => ({
      ...(jest.requireActual('utils/date')),
      today: jest.fn(() => '01-01-2020'),
   }));

   console.log(today()); // still logs current date 14-10-2021, not the mocked date       

   expect(myFunction()).toEqual(today());
});
Run Code Online (Sandbox Code Playgroud)

myFunction.js

import { today } from "utils/date";

export const myFunction = () => today();
Run Code Online (Sandbox Code Playgroud)

today是一个返回今天日期的函数。但出于测试目的,我需要该函数始终返回相同的日期,例如"01-01-2020"

注意:正如您所看到的,“today”函数在测试中以及被测试的 (myFunction) 函数中使用,因此它必须返回与应用程序中的所有位置相同的模拟值。

谢谢

javascript unit-testing reactjs jestjs

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

React SWR - 如何知道更新(变异)正在运行?

我主要使用 SWR 来获取数据,但是我遇到了需要更新数据的情况。问题是,我需要一个指示该请求正在进行的指示器,例如isLoading标志。在文档中有一个使用建议

const isLoading = !data && !error;
Run Code Online (Sandbox Code Playgroud)

但当然,当更新(变异)时,data仍然存在,因此该标志始终为false。与标志相同isValidating

const { isValidating } = useSWR(...);
Run Code Online (Sandbox Code Playgroud)

当突变正在进行时,此标志不会更改,但仅当其完成且GET请求开始时才更改。

问题

有没有办法知道我的是否PUT正在加载?注意:我不想使用状态中的任何字段,因为它不会像 SWR 数据一样被共享。也许我的 SWR 代码有问题?

const fetcher = (url, payload) => axios.post(url, payload).then((res) => res); 
  // ^^^^^ its POST but it only fetches data

const updater = (url, payload) => axios.put(url, payload).then((res) => res);
  // ^^^^^ this one UPDATES the data

const useHook = () => {
  const …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs swr

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

在 useState 钩子回调中使用副作用可以吗?

想象一下情况:

const [value, setValue] = useState(false);

const setSomething = (val) => {
  setValue((prev) => {
    fn(); dispatch(action); // or any other side effect
    
    return prev + val;
  });
};
Run Code Online (Sandbox Code Playgroud)

在回调中调用副作用在编程上是否符合反应原则useState?它会以某种方式影响渲染过程吗?

javascript reactjs react-hooks

9
推荐指数
2
解决办法
4075
查看次数

Apexcharts - 将鼠标悬停在一个非常小的列上

我在使用时遇到一种情况,apexcharts其中一列非常小。渲染工具提示很困难,因为您必须非常小心地将鼠标悬停在列上。

问题:有没有办法扩大悬停区域,以便更容易悬停列?或者也许有一个选项可以在悬停整个垂直区域(列上方和下方的空间)时呈现工具提示?谢谢你!

有问题的游乐场:https://codesandbox.io/s/react-basic-example-forked-nw3ll ?file=/src/App.js

javascript css charts reactjs apexcharts

6
推荐指数
1
解决办法
1643
查看次数

在没有 React.memo 的组件中使用 useCallback 有什么意义?

考虑示例:

const Child = () => {
  console.log("I did re-render!");
  return null;
};

const App = () => {
  const [_, setValue] = useState();
  const fn = useCallback(() => {
    // do something
  }, []);

  return (
    <div>
      <button onClick={() => setValue(Math.random)}>click</button>
      <Child fn={fn} />
    </div>
  );
};
Run Code Online (Sandbox Code Playgroud)

每次状态更改App(单击按钮)时,Child组件都会重新渲染,即使传递的 propfn是用useCallback. 但是,如果我用 换行ChildReact.memo它就会开始正常工作 - 当父级重新渲染时它不会重新渲染。

useCallbacks我的问题:不使用有什么意义React.memoReact.memo如果我不希望组件在其父级重新渲染时始终重新渲染,我是否应该始终使用?

应该始终与?useCallbacks一起使用 React.memo因为如果没有的话,它们似乎毫无意义、毫无用处React.memo

游乐场: …

javascript reactjs react-hooks

6
推荐指数
1
解决办法
949
查看次数

输入“FetchBaseQueryError | SerializedError' 不可分配给类型'ReactNode'

RTK 查询出错:

输入“FetchBaseQueryError | SerializedError' 不可分配给类型'ReactNode'。

const { data, error, isLoading } = useGetDataQuery();

return (
   <div>{error}</div>
);
Run Code Online (Sandbox Code Playgroud)

怎么解决呢?我应该显示什么?

javascript reactjs redux-toolkit rtk-query

3
推荐指数
1
解决办法
3714
查看次数