javascript - 无法访问 redux 道具
问题描述
当用户登录到应用程序时,他们的信息(用户名、电子邮件等)会保存在 redux 中。我可以登录,但我的问题是登录后访问实际信息。
这是我尝试访问 redux 的代码:
const mapStateToProps = state => ({
user: state.user,
});
class LikeComponent extends React.Component {
constructor(props) {
super(props);
this.state = {
likerUID: Firebase.auth().currentUser.uid,
likerUsername: this.props.user.username, //<------------------ Issue is here
错误:
TypeError: undefined is not an object (evaluating '_this.props.user.username')
当用户通过身份验证时,我如何将信息保存到 redux:
dispatch(authUser(Firebase.auth().currentUser.uid, Firebase.auth().currentUser.email, doc.data().username));
最后我的 redux 操作:
export const authUser = (userid, userEmail, username) => (dispatch) => {
const data = {
id: userid,
username,
email: userEmail,
};
dispatch(setAuthUser(data));
};
在我的 redux“authUser”中,我添加了console.log(username);
正确记录用户名的行:
export const authUser = (userid, userEmail, username) => (dispatch) => {
const data = {
id: userid,
username,
email: userEmail,
};
console.log(username);
dispatch(setAuthUser(data));
};
所以问题在于访问它,而不是设置它。
解决方案
不要在状态中存储道具
将值this.props
放入this.state
. this.props.user.username
您的状态将保存它看到的第一个值。它不会用新值更新。
您的constructor
函数在用户登录之前运行并设置状态,因此尝试访问this.props.user
是一个错误(“TypeError:undefined is not an object”)。undefined
this.props.user.username
相反,您希望在需要使用时直接从道具中访问用户名。这样你总能从 Redux 获得当前值。如果is ,您可以与可选链接 结合使用?.
以避免错误。user
undefined
const likerUsername = this.props.user?.username;
推荐阅读
- javascript - 如何从 JSON 中获取和显示其他选项
- azure-functions - Azure Functions Application Insights 上下文
- android - 在android Nougat Api 24中以编程方式断开来电
- typescript - 打字稿在通用中标记了联合
- ajax - 使用 ASP.NET mvc 在视图中分页数据而不重复 sql 查询
- arrays - 尝试更改使用迭代创建的数组中的单个值会更改多个值。为什么?
- excel - 识别 vba 列表中的文本变量
- unicode - 日文和中文名字/姓氏检测器
- java - 为多个模型 tensorflow java 的作业指定 CPU 或 GPU
- dm-script - 在 DigitalMicrograph GMS3 中添加/应用自定义数据栏到图像