Aph*_*hix 7 javascript mongodb reactjs next.js
我一直在尝试连接 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)
}
Run Code Online (Sandbox Code Playgroud)
当我使用此代码创建用户时,我的后端输出如下:
(抱歉,我还没有足够的代表来发布图片;-;) https://i.gyazo.com/fd83cf9362b0e88977dfb277687ca071.png
很奇怪,对吧?它重复得如此之快,以至于在第二个呼叫打入时用户甚至还没有创建。
我得出的结论是 NextJS 在客户端和服务器上重复代码,但我对 Next/React 的了解太少,无法非常准确。为什么我的代码(应该只运行一次)运行了多次?
解决方案:在我的 Next 项目的根目录(package.json 所在的位置)中,还有一个名为next.config.js
. 要为 Next 启用严格模式,您必须将对象更改nextConfig
为包含reactStrictMode: true
. 这是我的next.config.js
作品:
/** @type {import('next').NextConfig} */
const nextConfig = {
reactStrictMode: true,
}
module.exports = nextConfig
Run Code Online (Sandbox Code Playgroud)
-> 在 React 中,由于严格模式,它可以将每个页面渲染两次(仅在开发环境中)。-> 所以我们可以通过从react中的index.js中删除这个严格模式包装器来删除严格模式启用。
<React.StrictMode>
<div>
<ComponentOne />
<ComponentTwo />
</div>
</React.StrictMode>
Run Code Online (Sandbox Code Playgroud)
-> 和 next.js 基于 React,所以你必须找到如何在 next.js 中禁用严格模式的方法,这里是官方文档链接[禁用严格模式 next.js][1] [1]: https:// /nextjs.org/docs/api-reference/next.config.js/react-strict-mode
归档时间: |
|
查看次数: |
11100 次 |
最近记录: |