React 调用构造函数两次

IT技术 javascript reactjs
2021-05-17 04:49:40

我刚开始react,我正在尝试用它开发一个简单的网络应用程序,但出现错误。当我加载一个类组件时,我的构造函数被调用了两次你能帮忙吗?

Home.js


import React from 'react'
import Land from "../Land";

function Home() {
    return (
        <div>
            <h1>Home!</h1>
            <Land/>
        </div>
    )
}

export default Home

Partial Land.js

import React, { Component } from 'react'
import Login from "./Login";

class Land extends Component {
    constructor(props) {
        super(props)
        this.state = {

        }
        console.log("LAND")
    }


原木 LAND 被击中两次。在某些组件中,我希望进行命中数据库的 API 调用,但我只想命中一次。在许多情况下,使用componentDidMount并不方便,因为props只出现在componentDidMountid之后才出现,因此 id 喜欢调用 in render(我不会使用 setState,这会导致重新加载渲染)。

提前致谢

2个回答

您正在使用<StrictMode/>它的开发模式

<StrictMode/>,react 将检测到意外的副作用,这些副作用将在开发模式期间多次调用生命周期函数,在生产中不会被触发两次。

从文档:

为什么被调用两次

严格模式无法自动为您检测副作用,但它可以通过使它们更具确定性来帮助您发现它们。这是通过有意重复调用以下函数来完成的:

类组件构造函数、render 和 shouldComponentUpdate 方法

类组件静态 getDerivedStateFromProps 方法

功能组件体

状态更新器函数(setState 的第一个参数)

传递给 useState、useMemo 或 useReducer 的函数

不会打电话两次

笔记:

这仅适用于开发模式。生命周期不会在生产模式下被双重调用。

我不太明白你在评论中想说什么,但你完全可以调用在componentDidMounthook中获取数据的函数

这是一个例子:https : //codesandbox.io/s/react-calls-constructor-twice-q5gzs