[英]Importing functions using Typescript
TLDR - what's the difference between these imports in ReactJs using Typescript: TLDR - 使用 Typescript 在 ReactJs 中的这些导入有什么区别:
setState1: (numbers: number[]) => void,
setState2: Function
Hi peeps, I've recently came across weird(for me) behaviour of importing functions using Typescript on React.嗨,窥视,我最近遇到了奇怪的(对我来说)在 React 上使用 Typescript 导入函数的行为。 To explain it better I'll just put sample code:
为了更好地解释它,我将放置示例代码:
const FuncComp: React.FC = () => {
const [state1, setState1] = useState<number[]>([]);
const [state2, setState2] = useState<number[]>([]);
const handleSettingState1 = () => {
console.log("state1-",state1);
setState1([...state1, 1]);
}
console.log("state1-",state1);
const handleSettingState2 = () => {
console.log("state2-",state2);
setState1([...state2, 2]);
}
console.log("state2-",state2);
const saveChanges = () => {
saveHandler(
saveFunc,
setState1,
setState2
)
}
....
}
both handleSettingState1
and handleSettingState2
are functions passed to and set from child components, saveChanges
is onClick function of button inside FuncComp
and saveHandler
is imported from helper file and it looks like this: handleSettingState1
和handleSettingState2
都是传递给子组件和从子组件设置的函数, saveChanges
是 onClick function 的FuncComp
和saveHandler
是从帮助文件导入的,它看起来像这样:
export const saveHandler = (
saveFunc: GqlMutationType,
setState1: (numbers: number[]) => void,
setState2: Function
) => {
saveFunc()
.then(() => {
setState1([]);
setState2([]);
})
.catch((err: AxiosError) => {
console.log(err);
});
};
As you can see setState1
and setState2
are imported differently.如您所见,
setState1
和setState2
的导入方式不同。 Now the problem is that when I set both states through handlers -> perform save(it should clear both arrays in then callback) -> set another value, state1
will be empty both inside and outside handleSettingState1
scope, while state2
will have old value inside handleSettingState2
but empty inside the scope of the class.现在的问题是,当我通过处理程序设置两个状态时->执行保存(它应该在回调中清除 arrays)->设置另一个值,
state1
内部和外部都将为空handleSettingState1
scope,而state2
内部将有旧值handleSettingState2
但在 class 的 scope 内部为空。
I skipped implementation of handleSettingState2
and handleSettingState2
inside child component because I thought it's irrelevant but if it affects I can provide it too.我在子组件中跳过了
handleSettingState2
和handleSettingState2
的实现,因为我认为它无关紧要,但如果它影响到我也可以提供它。
You can update the save handler like so.您可以像这样更新保存处理程序。
export const saveHandler = (
saveFunc: GqlMutationType,
cb: (data: any) => void
) => {
saveFunc()
.then(data => cb(data))
.catch((err: AxiosError) => {
console.log(err);
});
};
Importing and calling the function导入和调用function
import { saveHandler } from './filename';
...
...
function saveFn() {}
saveHandler(saveFn, (data) => {
setState([...data]);
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.