我正在尝试创建一个自定义的挂钩,该挂钩允许我传递值并在每次按下按钮时减去1。我目前收到显示
的错误在函数“ handleLastPage”中调用反应挂钩“ useLastPage” 既不是React函数组件也不是自定义的React Hook函数
在以下代码中:
function usePrevPage (page) {
const [lastPage, useLastPage] = useState(page)
useEffect(() => {
function handleLastPage(page) {
useLastPage(page - 1)
}
handleLastPage()
})
return lastPage
}
我的代码紧密地反映了React Doc的自定义钩子示例,因此我不确定如何在自定义钩子中调用useLastPage
。以下是React's Doc中的示例:
function useFriendStatus(friendID) {
const [isOnline, setIsOnline] = useState(null);
useEffect(() => {
function handleStatusChange(status) {
setIsOnline(status.isOnline);
}
ChatAPI.subscribeToFriendStatus(friendID, handleStatusChange);
return () => {
ChatAPI.unsubscribeFromFriendStatus(friendID, handleStatusChange);
};
});
return isOnline;
}
答案 0 :(得分:2)
当您使用useLastPage
来更新const [lastPage, useLastPage] = useState(page)
时,反应很混乱。
尝试将useLastPage
更改为setLastPage
。您应该为钩子使用use
前缀。
答案 1 :(得分:2)
useEffect
与componentDidMount
和componentDidUpdate
相似。它会在Component
正在mounted/updated
时运行。要减小lastPage
状态值,您可以直接在useState回调内部直接调用其setter。另外,我建议将设置器前缀更改为set
而不是use
function usePrevPage (page) {
const [lastPage, setLastPage] = useState(page);
useEffect(() => {
setLastPage(page-1);
});
return lastPage;
}
如果要更改按钮单击的值,则需要在useEffect
外部编写处理程序,并将其设置为按钮的onClick
属性。
答案 2 :(得分:1)
我认为您的主要问题是您正在调用集合函数Ok(0)
-React linter寻找以单词useLastPage
开头的函数,并尝试将它们“钩住”。在这种情况下,use
不是钩子,而是useLastPage
返回的二传手。我怀疑如果将其命名为useState
,将会为您清除错误消息。