如何仅在组件从 Firebase 接收数据后才 mapStateToProps

莫雷兹

在应用程序中,我试图根据路由参数呈现数据。

当我运行代码时,我收到一个错误屏幕,因为 mapStateToProps 没有从 Firestore 收到数据并且 .find() 函数无法在“未定义”上运行。

const mapStateToProps = (state, ownProps) => {
  const id = ownProps.match.params.product_id;

  return {
    product: state.firestore.ordered.products.find(p => p.id === id)
  };
};

我尝试在组件本身内部使用条件渲染,但错误在 mapStateToProps() 内部。数据甚至没有到达组件,因为脚本在第一次尝试将状态映射到它的 props 时就停止了。

这是我的没有条件渲染的组件,供参考。

<div className="product-detail-page top-padding container col-lg-10">
        <div className="product-desc">
          <div className="product-desc-image col-lg-5">
            <img
              src={this.props.product.image}
              alt={this.props.product.name}
              className="col-12"
            />
          </div>
          <div className="product-desc-right col-lg-7">
            <h2 className="product-desc-title">{this.props.product.name}</h2>
            <div className="product-desc-bottom-section">
              <div className="product-desc-text">
                <p>
                  In stock - Ships from Ireland. Sold and Shipped by{" "}
                  <span className="comp-logo">
                    <Link to="/">
                      comp<span className="red-dot">.</span>com
                    </Link>
                  </span>
                </p>
                <ul>
                  <li>{this.randomDetails(1)}</li>
                  <li>{this.randomDetails(2)}</li>
                  <li>{this.randomDetails(3)}</li>
                  <li>{this.randomDetails(4)}</li>
                  <li>{this.randomDetails(5)}</li>
                  <li>{this.randomDetails(6)}</li>
                </ul>
                <div className="star-rating">
                  <img src={this.starRating(1)} alt="*" />
                  <img src={this.starRating(2)} alt="*" />
                  <img src={this.starRating(3)} alt="*" />
                  <img src={this.starRating(4)} alt="*" />
                  <img src={this.starRating(5)} alt="x" />
                </div>
              </div>
              <div className="product-desc-checkout">
                <div className="product-desc-total">
                  <h4>€ {this.preTaxCalculator().toFixed(2)}</h4>
                  <p>VAT - € {this.taxCalculator().toFixed(2)}</p>
                  <p>Shipping: € {this.props.product.shipping}</p>
                  <h3>{this.props.product.price}</h3>
                </div>
                <div className="product-desc-action-buttons">ADD TO CART</div>
                <div className="product-desc-action-buttons">
                  ADD TO WISHLIST
                </div>
                <div className="product-desc-action-buttons">
                  SAVE FOR LATER
                </div>
              </div>
            </div>
          </div>
        </div>
        <div className="product-details">
          <h2>Learn more about the {this.props.product.name}</h2>
          <table>
            <tbody>
              {this.renderKeys().map(key => (
                <tr key={key}>
                  <td>{key}</td>
                  <td>{this.props.product.details[key]}</td>
                </tr>
              ))}
            </tbody>
          </table>
        </div>
      </div>
莫雷兹

回答:

const mapStateToProps = (state, ownProps) => {
  const id = ownProps.match.params.product_id;
  if (state.firestore.ordered.products) {
    return {
      product: state.firestore.ordered.products.find(p => p.id === id)
    };
  }
};

我在 mapStateToProps 中使用了 if 语句。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

mapStateToProps 不设置组件 props 中的数据

来自分类Dev

如何在mapStateToProps中转换异步数据?

来自分类Dev

Firebase Cloud Messaging仅在发布后才起作用

来自分类Dev

如何避免无用的mapStateToProps()?

来自分类Dev

组件中的 Redux mapStateToProps 状态

来自分类Dev

向firebase添加新数据后,如何从组件中的firebase刷新数据?

来自分类Dev

您如何使Arduino通过Firebase接收数据?

来自分类Dev

您如何使Arduino通过Firebase接收数据?

来自分类Dev

Firebase + DialogFlow - 实时数据库 - 云函数仅在第二次请求后才返回查询结果

来自分类Dev

仅在水疗中心需要时才如何包括Vue组件?

来自分类Dev

仅在水疗中心需要时才如何包括Vue组件?

来自分类Dev

容器中使用React-Redux(来自mapStateToProps)的数据未传递到组件视图

来自分类Dev

如何从函数到类组件获取 mapStateToProps 值

来自分类Dev

仅在重新登录后才显示Firebase displayName,而不是首次登录

来自分类Dev

根据mapStateToProps输出重新渲染connect()组件

来自分类Dev

无法从react组件上的mapStateToProps获取值

来自分类Dev

React-Redux类组件mapStateToProps错误

来自分类Dev

RecyclerView仅在方向更改后才从ViewModel填充数据

来自分类Dev

仅在刷新角度页面后才显示来自api的数据

来自分类Dev

仅在通过解析保存数据后才执行/触发segue

来自分类Dev

Angular:仅在履行了几个承诺后才返回数据

来自分类Dev

如何仅在流星订阅完成后才在反应组件构造函数中设置初始状态值

来自分类Dev

如何仅在角度js中从tsv加载数据后才呈现指令

来自分类Dev

如何仅在使用Python请求加载数据后才抓取html表?

来自分类Dev

在节点中,我如何要求函数仅在获得所需的所有数据后才返回?

来自分类Dev

如何确保仅在异步/等待数据库插入成功后才执行某些JavaScript代码?

来自分类Dev

如何仅在角度js中从tsv加载数据后才呈现指令

来自分类Dev

如何仅在使用Python请求加载数据后才抓取html表?

来自分类Dev

仅在所有任务完成后才接收电子邮件

Related 相关文章

  1. 1

    mapStateToProps 不设置组件 props 中的数据

  2. 2

    如何在mapStateToProps中转换异步数据?

  3. 3

    Firebase Cloud Messaging仅在发布后才起作用

  4. 4

    如何避免无用的mapStateToProps()?

  5. 5

    组件中的 Redux mapStateToProps 状态

  6. 6

    向firebase添加新数据后,如何从组件中的firebase刷新数据?

  7. 7

    您如何使Arduino通过Firebase接收数据?

  8. 8

    您如何使Arduino通过Firebase接收数据?

  9. 9

    Firebase + DialogFlow - 实时数据库 - 云函数仅在第二次请求后才返回查询结果

  10. 10

    仅在水疗中心需要时才如何包括Vue组件?

  11. 11

    仅在水疗中心需要时才如何包括Vue组件?

  12. 12

    容器中使用React-Redux(来自mapStateToProps)的数据未传递到组件视图

  13. 13

    如何从函数到类组件获取 mapStateToProps 值

  14. 14

    仅在重新登录后才显示Firebase displayName,而不是首次登录

  15. 15

    根据mapStateToProps输出重新渲染connect()组件

  16. 16

    无法从react组件上的mapStateToProps获取值

  17. 17

    React-Redux类组件mapStateToProps错误

  18. 18

    RecyclerView仅在方向更改后才从ViewModel填充数据

  19. 19

    仅在刷新角度页面后才显示来自api的数据

  20. 20

    仅在通过解析保存数据后才执行/触发segue

  21. 21

    Angular:仅在履行了几个承诺后才返回数据

  22. 22

    如何仅在流星订阅完成后才在反应组件构造函数中设置初始状态值

  23. 23

    如何仅在角度js中从tsv加载数据后才呈现指令

  24. 24

    如何仅在使用Python请求加载数据后才抓取html表?

  25. 25

    在节点中,我如何要求函数仅在获得所需的所有数据后才返回?

  26. 26

    如何确保仅在异步/等待数据库插入成功后才执行某些JavaScript代码?

  27. 27

    如何仅在角度js中从tsv加载数据后才呈现指令

  28. 28

    如何仅在使用Python请求加载数据后才抓取html表?

  29. 29

    仅在所有任务完成后才接收电子邮件

热门标签

归档