Helenr
2021-05-31 13:51:27
我正在嘗試創建一個自定義 Hook,它允許我在按下按鈕時傳遞一個值并減去 1。我目前收到的錯誤是React Hook "useLastPage" 在函數 "handleLastPage" 中調用,該函數既不是 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 文檔中的示例: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;}
3 回答

達令說
TA貢獻1821條經驗 獲得超6個贊
useEffect類似于componentDidMount和componentDidUpdate。當它運行Component正mounted/updated。要減少lastPage狀態值,您可以直接在 useState 回調中直接調用它的 setter。另外我建議將 setter 前綴更改set為use
function usePrevPage (page) {
const [lastPage, setLastPage] = useState(page);
useEffect(() => {
setLastPage(page-1);
});
return lastPage;
}
如果要更改按鈕單擊時的值,則需要在外部編寫處理程序useEffect并將其設置為按鈕的onClick道具。

qq_花開花謝_0
TA貢獻1835條經驗 獲得超7個贊
我認為您的主要問題是您正在調用 set 函數useLastPage
-React linter 查找以單詞開頭的函數use
并嘗試將它們“lint”為鉤子。在這種情況下useLastPage
不是一個鉤子,它是從useState
. 我懷疑如果你調用它setLastPage
會為你清除錯誤消息。
添加回答
舉報
0/150
提交
取消