当我进入应用程序的一页时,我使用 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) 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 文件的选项,但仍然没有找到解决方案。
我编写了用于切换布尔和值的自定义钩子:
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”。
我在我的项目中使用redux和redux-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?
我正在尝试对++使用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允许此操作)
我究竟做错了什么?
出于测试目的,我需要模拟 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) 不是函数
我在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
但是我完全担心键入匿名函数。了解这一点的魔力是什么?也许可以将此函数重写为“正常”函数以清楚地看到类型?
我的问题是:我们如何获得这些类型?他们来自哪里以及如何评估?
您好,我需要对对象数组进行复杂的迭代。我有这样的数组:
[
{ 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) 我有对象数组的数组,如下所示:
[
[
{
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 作为最后一个数组元素。如何修改它以仅返回真/假值?
reactjs ×5
arrays ×2
haskell ×2
javascript ×2
react-hooks ×2
typescript ×2
jestjs ×1
loops ×1
prettier ×1
react-router ×1
redux ×1
redux-saga ×1
stomp ×1
testing ×1
websocket ×1