首页 > 解决方案 > 根据 React Web 应用程序中的状态呈现 if 语句

问题描述

我正在尝试根据当前状态呈现包含不同文本的跨度。

我认为这应该很简单,但事实并非如此......

我有四个变量:

const stNumbers = [1, 21, 31]
const ndNumbers = [2, 22]
const rdNumbers = [3, 23]
const thNumbers = [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 24, 25, 26, 27, 28, 29, 30]

其中每一个都是从 1 到 31 的数字数组。它们所在的数组取决于它们在日期中的显示方式,即 1 日、2 日、3 日、4 日等。

然后我有一个函数,该函数根据状态是否与上述数组中的任何值匹配而呈现一个跨度。

const numbersCheck = () => {
      if (stNumbers.includes(this.state.paymentDate)) {
        return <span>st</span>
      } else if (ndNumbers.includes(this.state.paymentDate)) {
        return <span>nd</span>
      } else if (rdNumbers.includes(this.state.paymentDate)) {
        return <span>rd</span>
      } else if (thNumbers.includes(this.state.paymentDate)) {
        return <span>th</span>
      } else {
        return <span></span>
      }
    }

这调用“包含”来检查每个数组并确定它应该呈现哪个跨度。

然后我想在我的组件中呈现这个函数,而不是它们只是一个数字,即 3、9、12、24 或任何其他示例,而是表示第 3、第 9、第 12、第 24。

输入设置文本输入时的状态。

我正在尝试这样做:

<div className="link-debt-input-container">
              <input className="link-debt-number-input" list="date-list" name="paymentDate" value={this.state.paymentDate} onChange={this.onChange} />
                <datalist id="date-list">
                  <option value="1" />
                  <option value="2" />
                  <option value="3" />
                  <option value="4" />
                  <option value="5" />
                  <option value="6" />
                  <option value="7" />
                  <option value="8" />
                  <option value="9" />
                  <option value="10" />
                  <option value="11" />
                  <option value="12" />
                  <option value="13" />
                  <option value="14" />
                  <option value="15" />
                  <option value="16" />
                  <option value="17" />
                  <option value="18" />
                  <option value="19" />
                  <option value="20" />
                  <option value="21" />
                  <option value="22" />
                  <option value="23" />
                  <option value="24" />
                  <option value="25" />
                  <option value="26" />
                  <option value="27" />
                  <option value="28" />
                  <option value="29" />
                  <option value="30" />
                  <option value="31" />
                </datalist>
              { numbersCheck }
            </div>

每次我尝试渲染我的页面时,我都会收到以下错误:

警告:函数作为 React 子级无效。如果您返回一个组件而不是从渲染中返回,则可能会发生这种情况。或者,也许您打算调用此函数而不是返回它。

我不明白这是怎么发生的,因为我在“numbersCheck”函数中返回跨度?

谁能指出我哪里出错了?

标签: reactjs

解决方案


您必须调用该方法,而不仅仅是插入它:

{ numbersCheck() }

JSX 构建了一个 React 元素树。您正在尝试将函数而不是元素插入到树中。


推荐阅读