javascript - 我应该在 React 组件中初始化一个空状态变量吗?

标签 javascript reactjs

我对 React 还是有点陌生​​,我觉得它很棒,但目前有一件事在我脑海中,我想知道如何看待它。

例如,我正在制作一个结账组件,其中有一个减价优惠券字段。

我将事件的当前价格传递给优惠券,以便它可以计算新的:

{this.state.showCouponField ? (
  <CouponForm
    validateCoupon={(coupon) => this.setState({ coupon: coupon })}
    initialValue={this.state.coupon ? this.state.coupon.token : ''}
    initialPrice={this.state.event.final_price}
    setReducedPrice={(reducedPrice) => this.setState({ reducedPrice })}
  />
) : null}

然后显示:

<p className="lead">
  Total :
  <span className="pull-right">
    {this.state.reducedPrice ? (
      <span>
        <s>
          {isFree ? 'Gratuit' : `${event.real_final_price * this.state.participants} €`}
        </s>
        &nbsp;
        {this.state.reducedPrice === 0 ? 'Gratuit' : `${this.state.reducedPrice / 100 * this.state.participants} €`}
      </span>
    ) : (
      <span>
        {isFree ? 'Gratuit' : `${event.real_final_price * this.state.participants} €`}
      </span>
    )}
  </span>
</p>

但例如,在有人使用优惠券之前,变量 reducedPrice 为空。

问题是:将 reducedPrice 设置为初始状态是否是一个好习惯

constructor(props) {
  super(props);
  this.state = {
    event: null,
    creditCards: [],
    selectedCardId: null,
    addCreditCard: false,
    participants: 1,
    coupon: null,
    total: 0,
    error: null,
    loading: false,
    bookingId: null,
    user: null,
    showCardOptions: false,
    showModal: false,
    modalUrl: null,
  };

  this.updatePaymentMeans = this.updatePaymentMeans.bind(this);
}

所有这些空变量对我来说似乎都是无用的,因为它们默认为空,而且不需要初始化它们——或者我还没有看到错误——因为状态是一个对象,所以它可以动态创建。

我知道我会忘记其中的一些,所以我想知道我是否会简单地不设置它们,这样如果我错过一个,它就会明显崩溃。

开放式问题 :D

最佳答案

将它们设置为 nullundefined 将导致相同的结果/错误,因为您很少会使用三等号来比较它的存在。

selectedCreditCardId ? something : else

但是话又说回来,同样的事情发生在 true/false 上,与其他类型(字符串,数字,......)相反,你很少使用三重 -两者都相等。

所以它与完全相同:this.state = { isTall: false },而不是完全没有它

是高吗?是:否

仍然会给您相同的结果。 (此示例旨在为您提供更好的链接上下文,稍后我将向您展示)

IMO,因为这是一个自以为是的问题
将它们定义在顶部,而不是将它们分布在渲染方法中,将提供有关当前状态和下一个状态的快速概览。

做什么,只要确保保持一致。

您可能还想检查:

关于javascript - 我应该在 React 组件中初始化一个空状态变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41503066/

相关文章:

javascript - 在使用 window.find() 进行字符串搜索期间,会出现一个对话框

javascript - react 原生如何使用 Prop 自定义样式

javascript - for 循环和innerHTML

javascript - 实时 D3 气泡图(圆包)

javascript - 在元素离开鼠标指针后移除悬停效果

javascript - 为什么第二个警报仍然显示第一个 View 模型 (vm1)?

reactjs - React Router - 更新版本后 withRouter 上的 Typescript 错误

javascript - 无法在 react 中设置状态

javascript - Material ui Autocomplete 按回车键创建新芯片

javascript - 在reactjs中滚动到页面顶部