我一直在嘗試連接 web 應用程式的前端和后端,但我遇到了一個問題,當用戶創建帳戶時,會在資料庫中為該用戶創建多個物件。我使用console.log并發現我的 NextJS 代碼在重復。我發現這個稍微相關的帖子:組件函式運行多次反應
但是,它處理異步呼叫的問題,我已經通過空/未定義檢查解決了這些問題。這是我當前的用戶注冊碼:
const handleUser = async (user) => {
var bUserExists = false
await axios.get(GET_USER(user.email))
.then(response => {
bUserExists = true;
})
.catch(err => {
bUserExists = false
})
if(!bUserExists) {
bUserExists = true;
await axios.post(CREATE_USER(), {
email: user.email,
name: user.name,
}).then(newUser => {
console.log(newUser.data)
if(newUser.data) {
router.push('/form/p1')
}
}).catch(err => {
console.log(err)
})
}
}
const { user, error, isLoading } = useUser();
if(isLoading) return <div>Loading...</div>;
if(error) return <div>{error.message}</div>;
if(user) {
// try to get the user from the database
// if the user doesn't exist, create one
handleUser(user)
}
當我使用此代碼創建用戶時,我的后端會輸出以下內容:
(抱歉,我還沒有足夠的代表來發布圖片;-;) https://i.gyazo.com/fd83cf9362b0e88977dfb277687ca071.png
很奇怪,對吧?它重復得如此之快,以至于在第二個電話進來時甚至還沒有創建用戶。
我得出的結論是 NextJS 在客戶端和服務器上都在重復代碼,但是我對 Next/React 的了解太少,不能說得非常準確。為什么我的代碼(應該只運行一次)運行多次?
uj5u.com熱心網友回復:
-> 由于嚴格模式而做出反應,使其每頁渲染兩次(僅在開發環境中)。-> 所以我們可以通過從 index.js 中移除這個 Strict 模式包裝器來移除 Strict 模式啟用。
<React.StrictMode>
<div>
<ComponentOne />
<ComponentTwo />
</div>
</React.StrictMode>
-> 并且 next.js 是基于反應的,所以你必須找到如何在 next.js 中禁用嚴格模式的方法,這里是官方檔案鏈接[禁用嚴格模式 next.js][1] [1]:https:/ /nextjs.org/docs/api-reference/next.config.js/react-strict-mode
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/491142.html
標籤:javascript 反应 mongodb 下一个.js
上一篇:以角度呼叫滑塊內的子組件
下一篇:自定義Y軸標簽并在d3中打勾
