小编hei*_*584的帖子

React hooks - 当我们刷新页面时从 react-router 位置状态中删除

当我进入应用程序的一页时,我使用 react-router 通过位置状态传递数据。然后我通过location.state.myDataObject. 当我刷新页面时它仍然存在,而我希望它是空的。这是我尝试使用的内容:

  const resetLocation = () => {
    history.replace({
      ...location,
      state: undefined,
    });
  };

  useEffect(() => {
    window.addEventListener('onbeforeunload', resetLocation);
  }, []);
Run Code Online (Sandbox Code Playgroud)

或者将其添加到unmount操作中,useEffect但我想刷新页面时不会调用它:

  useEffect(() => {
    return function cleanLocationState() {
      history.replace({
        ...this.props.location,
        state: undefined,
      });
    };
  }, []);
Run Code Online (Sandbox Code Playgroud)

reactjs react-router react-hooks

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

tsx 文件中的单引号更漂亮

2-3 周,虽然我没有更改漂亮文件中的任何内容,但 VSC 开始将单引号更改为双引号,而它始终是单引号。我尝试了很多选择,但它一直在改变它。这是我的 .prettierrc

{
  "trailingComma": "es5",
  "printWidth": 200,
  "semi": true,
  "singleQuote": true,
  "jsxSingleQuote": true,
  "tabWidth": 2,
  "quoteProps": "as-needed"
}
Run Code Online (Sandbox Code Playgroud)

编辑:我认为,这是 .tsx 文件的问题,因为 prettier 只有 .jsx 文件的选项,但仍然没有找到解决方案。

typescript reactjs prettier

6
推荐指数
2
解决办法
4041
查看次数

Typescript 中的自定义反应钩子 useToggle

我编写了用于切换布尔和值的自定义钩子:

import { useState } from 'react';

export function useToggle(initialValue: boolean) {
  const [value, setValue] = useState<boolean>(initialValue);

  const toggleValue = () => setValue(!value);

  return [value, toggleValue];
}
Run Code Online (Sandbox Code Playgroud)

然后我像下面这样使用它:

 const [modalOpen, setModal] = useToggle(false);
Run Code Online (Sandbox Code Playgroud)

但出现错误:

输入“布尔值|” (() => void)' 不可分配给类型 'boolean | ((() => void) & false) | ((() => void) & true)'。类型“() => void”不可分配给类型“boolean |” ((() => void) & false) | ((() => void) & true)'。类型“() => void”不可分配给类型“(() => void) & false”。类型“() => void”不可分配给类型“false”。

typescript reactjs react-hooks

5
推荐指数
2
解决办法
3910
查看次数

在 websocket 回调中调用 redux-saga 中的 redux 操作(stomp + sockjs)

我在我的项目中使用reduxredux-saga。现在使用 WebSocket 我在调用FETCH_SUCCESS redux套接字响应回调中的操作时遇到问题。我也尝试将回调设为生成器,但效果不佳。

function* websocketSaga() {
  const socket = new SockJS(`${CONFIG.API_URL}/ws`);
  const stomp = Stomp.over(socket);
  const token = yield select(selectToken);
  stomp.connect(
    {
      Authorization: `Bearer ${token}`,
    },
    frame => {
      stomp.subscribe('/queue/data', message => {
        const response = JSON.parse(message.body);
        console.log(response); // here is the proper response, it works
        put({
          type: FETCH_SUCCESS, // here the FETCH_SUCCESS action is not called
          payload: response.dataResponse,
        });
      });
      ...
      ....
    }
  );
}
Run Code Online (Sandbox Code Playgroud)

或者也许这个 WebSocket 应该以完全不同的方式实现redux-saga

stomp websocket reactjs redux redux-saga

4
推荐指数
1
解决办法
1280
查看次数

在foldl和++一起使用时约束错误中的非类型变量参数

我正在尝试对++使用fold。它应该在我检查它的类型时起作用:

> :t foldl (++)
foldl (++) :: Foldable t => [a] -> t [a] -> [a]
Run Code Online (Sandbox Code Playgroud)

当我尝试像这样使用时

> foldl (++) [1] [1,2,3]
Run Code Online (Sandbox Code Playgroud)

我收到如下错误:

约束中的非类型变量参数:Num [a](使用FlexibleContexts允许此操作)

我究竟做错了什么?

haskell

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

在 Jest 中模拟 jwt-decode

出于测试目的,我需要模拟 jwt-decode 库。我使用它如下:

const decodedToken: { exp: number } = jwt_decode(token);
Run Code Online (Sandbox Code Playgroud)

然后在测试中尝试了以下并得到如下错误:

jest.mock('jwt-decode');
Run Code Online (Sandbox Code Playgroud)

类型错误:无法读取未定义的属性“exp”

jest.mock('jwt-decode', () => ({
  exp: 123,
}));
Run Code Online (Sandbox Code Playgroud)

TypeError: (0 , _jwtDecode.default) 不是函数

testing reactjs jestjs

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

Haskell中的匿名函数类型

我在Haskell中键入匿名函数时遇到问题。例如,当我们有:

\x -> x 5
Run Code Online (Sandbox Code Playgroud)

Num t1 => (t1 -> t2) -> t2我确定GHCI中检查的类型是相反的。

\x -> a * x
Run Code Online (Sandbox Code Playgroud)

Num a => a -> a(我知道我们需要假设a是一个整数,因为(*)的类型是Int-> Int-> Int(没有类型类)。
另一个例子是

\f -> f x
Run Code Online (Sandbox Code Playgroud)

据我所检查的是(s-(a-> b)-> b

但是我完全担心键入匿名函数。了解这一点的魔力是什么?也许可以将此函数重写为“正常”函数以清楚地看到类型?

我的问题是:我们如何获得这些类型?他们来自哪里以及如何评估?

haskell

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

将计数值添加到具有相同键值的对象(对象数组)

您好,我需要对对象数组进行复杂的迭代。我有这样的数组:

[ 
  { name: 'Jacob', lastName: 'Smith', dob: '1995-11-29' },
  { name: 'Jacob', lastName: 'Smith', dob: '1991-08-21' },
  { name: 'Ann', lastName: 'Smith', dob: '1995-11-29' },
  { name: 'Ann', lastName: 'Nansen', dob: '1983-01-01' },
  { name: 'Jacob', lastName: 'Smith', dob: '1985-06-15' },
  { name: 'Jacob', lastName: 'Smith', dob: '1995-11-29' },
  { name: 'Ann', lastName: 'Smith', dob: '2010-11-29' },
]
Run Code Online (Sandbox Code Playgroud)

我想向每个对象添加 count 属性来计算具有相同名称和姓氏的对象...所以现在应该是:

[ 
  { name: 'Jacob', lastName: 'Smith', count: 4 },
  { name: 'Ann', lastName: 'Smith', count: 2 },
  { …
Run Code Online (Sandbox Code Playgroud)

javascript arrays loops

0
推荐指数
1
解决办法
1941
查看次数

对象数组数组 - 查找对象值出现并返回真/假(js)

我有对象数组的数组,如下所示:

[
  [
    {
      id: 1,
      itemName: 'xxx',
      ...
    },
    {
      id: 1,
      itemName: 'yyy',
      ...
    },
    ...
  ],
  [
    {
      id: 2,
      itemName: 'aaa',
      ...
    },
    {
      id: 2,
      itemName: 'kkk',
      ...
    },
    ...
  ],
  [
    {
      id: 3,
      itemName: 'kkk',
      ...
    },
    {
      id: 3,
      itemName: 'yyy',
      ...
    },
    ...
  ]
]
Run Code Online (Sandbox Code Playgroud)

我试图检查数组内对象中的任何 itemName 是否等于给定的字符串,但我坚持将这些数组与此类对象保存在一个数组中的解决方案。这是我的解决方案:

  function isNameAcrossData(givenString){
    return arr.map(arrItem =>
      arrItem.find(item => item.itemId === givenString)
    );
  }
Run Code Online (Sandbox Code Playgroud)

我的解决方案不返回布尔值,而只返回一个带有对象的数组,其中包含 givenString 和 undefined 作为最后一个数组元素。如何修改它以仅返回真/假值?

javascript arrays

-1
推荐指数
1
解决办法
67
查看次数