首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >React & Redux MapStateToProps

React & Redux MapStateToProps
EN

Stack Overflow用户
提问于 2021-09-12 23:31:22
回答 2查看 30关注 0票数 1

我正在使用Redux构建一个用于状态管理的React应用程序。我的应用程序允许用户注册和购买订阅。我想在“我的帐户”页面中显示订阅的详细信息,并为尚未订阅的用户显示JOIN NOW行动号召。

当用户登录时,我调用数据库获取订阅集合广告,如果存在,则将其添加到存储中。

我正在使用下面的代码将我的状态映射到我的帐户页面中的属性,但当有人在没有订阅的情况下登录时,我一直收到错误'subscription.currentSubscription is NULL‘。然而,我需要映射来显示订阅用户的详细信息……

您是如何处理这种情况的?

谢谢

代码语言:javascript
复制
const mapStateToProps = ({ user, join, subscription }) => ({
    currentUser: user.currentUser,
    joinStage: join.joinStep,
    priceData: subscription.currentSubscription.priceData,
    subscriptionData: subscription.currentSubscription.subscriptionData,
});
EN

回答 2

Stack Overflow用户

发布于 2021-09-12 23:42:59

为什么不像下面这样缩小subscription的范围呢?

代码语言:javascript
复制
const mapStateToProps = ({ user, join, subscription }) => ({
    currentUser: user.currentUser,
    joinStage: join.joinStep,
    subscription: subscription.currentSubscription
});

在你的代码逻辑中,在使用它之前只需检查subscription

代码语言:javascript
复制
  const App = ({ subscription }) => {
    if (!subscription) return null
     
    return subscription.priceData
  }
票数 0
EN

Stack Overflow用户

发布于 2021-09-12 23:51:01

如果subscription.currentSubscription为空或未定义,则在尝试更深入地访问状态时将抛出错误。

您可以使用可选的链接来防止空/未定义的访问:

代码语言:javascript
复制
const mapStateToProps = ({ user, join, subscription }) => ({
  currentUser: user.currentUser,
  joinStage: join.joinStep,
  priceData: subscription?.currentSubscription?.priceData,
  subscriptionData: subscription?.currentSubscription?.subscriptionData,
});

或者使用更传统的null检查/保护子句:

代码语言:javascript
复制
const mapStateToProps = ({ user, join, subscription }) => ({
  currentUser: user.currentUser,
  joinStage: join.joinStep,
  priceData: subscription
    && subscription.currentSubscription
    && subscription.currentSubscription.priceData,
  subscriptionData: subscription
    && subscription.currentSubscription
    && subscription.currentSubscription.subscriptionData,
});

其中有些是多余的,所以您可以在返回映射状态之前进行检查。

代码语言:javascript
复制
const mapStateToProps = ({ user, join, subscription }) => {
  const {
    priceData,
    subscriptionData,
  } = subscription?.currentSubscription || {};

  return {
    currentUser: user.currentUser,
    joinStage: join.joinStep,
    priceData,
    subscriptionData,
  }
};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69155920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档