能够在我的 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
来自一些异步调用。事情是这样发生的:
-
email
is an undefined
状态。但是你进行异步调用来获取email
.
- 您渲染组件,但是
email
is undefined
因为异步调用还没有完成,所以你控制台undefined
in componentDidMount
.
- 然后你从异步调用、电子邮件的 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(使用前将#替换为@)