【发布时间】:2021-11-22 10:44:12
【问题描述】:
我正在尝试创建一个自定义挂钩,它接收带有接口的 2 个类型化参数,但我收到一条消息 Expected 1 arguments, but got 2,我不确定我是否声明接口错误或文件不能是 tsx
文件index.tsx
const [thisPage, setThisPage] = useState(1)
const changePage = (newNumber?: number): void => {
console.log(newNumber ?? thisPage)
}
const { goNext, goBack } = useSideButtons(changePage, setThisPage)
文件useSideButtons.tsx
import { useEffect, SetStateAction } from 'react'
interface ISideButtons {
changePage: (newNumber?: number) => void
setThisPage: (value: SetStateAction<number>) => void
}
interface ISideExports {
goNext: () => void
goBack: () => void
}
export default function useSideButtons ({ changePage, setThisPage }: ISideButtons): ISideExports {
useEffect(changePage, [])
const goNext = (): void => {
setThisPage((actual) => {
const newNumber = actual + 1
return newNumber
})
}
const goBack = (): void => {
setThisPage(actual => {
if (actual > 1) {
const newNumber = actual - 1
changePage(newNumber)
return newNumber
} else {
return 1
}
})
}
return { goNext, goBack }
}
我知道这样使用是可行的,但我想声明一个接口以使代码更易于阅读:
import { useEffect, SetStateAction } from 'react'
interface ISideExports {
goNext: () => void
goBack: () => void
}
export default function useSideButtons (
changePage: (newNumber?: number) => void,
setThisPage: (value: SetStateAction<number>) => void
): ISideExports {
useEffect(changePage, [])
const goNext = (): void => {
setThisPage((actual) => {
const newNumber = actual + 1
localStorage.setItem('instandaThisPage', String(newNumber))
return newNumber
})
}
const goBack = (): void => {
setThisPage(actual => {
if (actual > 1) {
const newNumber = actual - 1
changePage(newNumber)
localStorage.setItem('instandaThisPage', String(newNumber))
return newNumber
} else {
return 1
}
})
}
return { goNext, goBack }
}
【问题讨论】:
标签: reactjs typescript react-hooks tsx react-tsx