将 props 传递给 componentDidMount

2024-06-08

能够在我的 Dashboard 组件中渲染 props,无法将其传递给 componentDidMount 进行进一步的 ajax 处理。

渲染工作正常并显示信息。

我正在使用 firebase 并且工作正常。

App.js

// React core.
import React, { Component } from 'react';
import Dashboard from './components/Dashboard';

class App extends Component {

 //firebase...

  state = {
    isSignedIn: undefined,
    displayName: undefined,
    email: undefined
  };

  componentDidMount() {

      this.setState({providerData: user.providerData}) 
      this.setState({ displayName: user.providerData[0].displayName })  
      this.setState({ email: user.providerData[0].email })   
    });
  }

  render() {
    return (

      <div className={styles.container}>
        {this.state.isSignedIn !== undefined && !this.state.isSignedIn &&
          //Not signed-in yet
          <div>

            <Login />

          </div>
        }

        {this.state.isSignedIn &&
          //Signed in
          <div>
            <Dashboard 
              displayName={this.state.displayName} 
              email={this.state.email} />

          </div>
        }   
      </div>
    );
  }
}

export default App;

仪表板.js

import React, { Component } from 'react';


class Dashboard extends Component {


    componentDidMount() {
        var thisComponent = this
        console.log(thisComponent.props.email)
    }

    render()  {
        const email = this.props.email

        return (
            <div>
                <h1>Hello, {this.props.displayName}!</h1>
                <h2>Your email is: {email}</h2> 
            </div>
        );
    }
}

export default Dashboard;

Dashboard.js 中的 componentDidMount 是让我困惑的地方。无法发送电子邮件值以进行进一步的 ajax 处理。 应该在控制台中收到电子邮件,相反,我收到“未定义”。


发生在你身上的事情唯一可能发生的情况是email来自一些异步调用。事情是这样发生的:

  1. email is an undefined状态。但是你进行异步调用来获取email.
  2. 您渲染组件,但是email is undefined因为异步调用还没有完成,所以你控制台undefined in componentDidMount.
  3. 然后你从异步调用、电子邮件的 setState 中获取结果,它会下降到 props 并重新渲染Dashboard使用正确的电子邮件。

这样,您会看到呈现的电子邮件,但在componentDidMount它是未定义的。它渲染了 2 次,并且只在几秒钟的时间内,在组件已经安装之后,您就得到了正确的结果email.

这是您可以看到数据的唯一情况,但它在中未定义componentDidMount我几乎可以肯定这就是你的情况。

您几乎没有提供任何代码来解决您的问题,我唯一能做的就是通过对您的案例进行一些假设来告诉您问题的原因。希望这可以帮助您了解您的问题并解决它。

Edit:在您的代码中,您正在使用 firebase (异步调用)获取电子邮件,因此我的假设是正确的,现在只需要知道预期结果是什么。

Edit:如果您需要在组件内对电子邮件执行某些操作,请使用组件已挂载 https://reactjs.org/docs/react-component.html?utm_source=caibaojian.com#componentdidupdate

对于你的情况你可以做

componentDidUpdate(prevProps) {
  // Typical usage (don't forget to compare props):
  if (this.props.email != undefined && this.props.email !== prevProps.email) {
    // Do what you want with email
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 props 传递给 componentDidMount 的相关文章

随机推荐

  • 使用西里尔字母的正则表达式

    我有一个用于文本区域字段中字数统计的 jQuery 函数 此外 它排除所有用 三重括号 封闭的单词 它对于拉丁字符效果很好 但对于西里尔字母句子有问题 我认为错误部分与正则表达式有关 field val replace g match b
  • 字符编码失败,为什么\xBD在PHP + HTML中显示不正确

    我只是想更好地理解字符编码 所以我做了一些测试 我有一个保存为 UTF 8 的 PHP 文件 如下所示 页面本身
  • IDependencyResolver 是反模式吗?

    我正在对旧版 ASP NET 应用程序进行一些架构更改 我模拟了 ASP NET MVC 的 IDependencyResolver 为依赖解析创建了一些类的原型 我不会发布 因为它的界面几乎相同 但采用其他自然语言 我发现它可能被认为是服
  • JQuery Slide切换显示类型

    我使用 jQuery SlideToggle 来显示隐藏的表格行 但它将显示样式设置为阻止 我需要显示表格行 我有什么想法可以做到这一点吗 提前致谢 我找到了解决此问题的方法 检查显示是否已设置为阻止 如果元素已切换为显示 如果是 则设置为
  • CSS悬停边框而不调整图像大小

    我想问一下 在不调整图像大小的情况下 我的悬停边框下方功能做错了什么 我已按照给出的指南进行操作here https css tricks com image rollover borders that do not change layo
  • 从mongoDB和Nodejs获取数据:toArray不是函数错误[重复]

    这个问题在这里已经有答案了 我有以下代码 var user User find limit 1 skip 10 toArray 但我收到错误消息toArray不是一个函数 但如果我执行以下操作 我将获得所有记录 User find func
  • JavaScript 函数参数和范围

    我用下面列出的代码做了一些测试 function foo x alert y var y I am defined outside foo definition foo 上面的代码给了我一个警告 我是在 foo 定义之外定义的 然后另一个测
  • 区块链是否包含 websocket 服务器?

    我最近阅读了有关区块链的文章 并对这项技术非常感兴趣 我有几个关于区块链的问题 区块链是否使用网络套接字在用户之间传输信息 如果是 那么发送的信息 块 总是 JSON 对象吗 是否所有用户都拥有区块链的完整副本 他们每个人是否只看到区块链的
  • 如何为 WmiSetBrightness 传递 WMIC 参数

    PowerShell 中的以下行有效 亮度更改为 30 Get WmiObject Namespace root wmi Class WmiMonitorBrightnessMethods WmiSetBrightness 0 30 但是
  • 打开Excel,解析数据?

    替代标题 ReadAllLines Analogue for Excel 加载和操作 Excel 数据的最佳方法是什么 我想快速打开 Excel 工作表并执行文本操作 我希望该操作像 ReadAllLines 一样工作 https msdn
  • Linux 内核运行稀疏失败 - /bin/sh: 1:稀疏: 未找到

    我在 Linux 内核上运行稀疏 但它会抛出以下错误 在 Linux 上运行稀疏 lovegcy knltest VirtualBox git root linux make C 2make 1 不对 all 执行任何操作 HOSTCC a
  • C++ 中数组的正确分配和释放内存

    我正在处理动态数组 功能empty matrix 创建一个新数组 表示一个矩阵 delete matrix 释放为矩阵分配的所有内存 我的函数中是否出现内存泄漏example 如果我打电话add add a b c 函数中分配的内存会发生什
  • 自定义过滤器在 Angular Hybrid 应用程序中不起作用

    我正在尝试将 AngularJS 1 6 应用程序与 Angular 5 一起转换为混合应用程序 我定义了以下简单过滤器 function use strict var filterId colorPicker angular module
  • 分发编译后的 fortran 库和模块文件

    我有一个Fortran使用很多模块的库 我用ifortWindows 上的编译器 因此 我得到一个 lib图书馆的文件和 mod所用模块的文件 这有一个缺点 我还必须分发 mod文件 如果我想在另一个程序中使用编译的库 如何防止这种情况发生
  • 如何将 Ajax 与 Symfony2 集成 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在寻找有关 symfony2 中
  • 我可以根据 .NET Core 中的运行时标识符定义常量吗?

    我有一个 NET Core 控制台应用程序 我的目标是能够有条件地DLLImport一个函数并调用它 但仅限于 Windows 运行时 我想也许我可以访问运行时标识符csproj文件中 我可以有条件地为该运行时定义一个常量 然后在我的 c
  • 约束验证@Null 的要点是什么?

    我正在检查可用约束列表 http docs oracle com javaee 6 api javax validation constraints package summary html in javax validation包 我注意
  • numpy:与索引数组有效求和

    假设我有 2 个矩阵 M 和 N 都有 gt 1 列 我还有一个索引矩阵 I 有 2 列 1 列代表 M 一列代表 N N 的索引是唯一的 但 M 的索引可能出现多次 我想要执行的操作是 for i j in w M i N j 除了 fo
  • 如何在 Google Analytics v4 崩溃报告中为未捕获的异常创建详细的堆栈跟踪?

    默认情况下 Google Analytics 仅在其崩溃报告中报告未捕获异常的顶行 请参阅此中的第一张图片 博客文章 http dandar3 blogspot nl 2013 03 google analytics easytracker
  • 将 props 传递给 componentDidMount

    能够在我的 Dashboard 组件中渲染 props 无法将其传递给 componentDidMount 进行进一步的 ajax 处理 渲染工作正常并显示信息 我正在使用 firebase 并且工作正常 App js React core