无法在反应渲染方法中使用if / else

时间:2019-11-10 16:40:12

标签: reactjs jsx

我正在将React与Ant Design一起使用,但这只是一个React问题。

我有这样的代码:

  {
    title: "Group",
    dataIndex: "group",
    key: "group",
    render: text => (
     <a> {text} </a>
    )
  }

不是render: text => (),它允许我在js函数(或jsx?)中使用html

但是,如果我尝试使用if / else逻辑,则总是会出错。

现在我正在使用像这样的愚蠢的东西:

render: texts => (
  <span>
     {[""].map(text => {
      if(texts.includes(":")) {
       return (<b> {texts} </b>)
      }
    return (<a> {texts} </a>)
  })}
</span>

问题是,有没有一种方法可以不使用[""].map()呢?如果不行,为什么不简单

2 个答案:

答案 0 :(得分:3)

您不能在JSX内使用if/else,但可以在返回一些JSX之前在JSX内使用三元表达式或在函数内使用if/else条件。这是两个示例:

    {

      render: texts => (
        <span>
          { 
            texts.includes(":")
              ? <b> {texts} </b>
              : <a> {texts} </a>
          }
        </span>
      ),

      otherRender: texts => {
        if (texts.includes(":")) {
          return (
            <span><b> {texts} </b></span>
          )
        }
        return (
          <span><a> {texts} </a></span>
        )
      }

    }

答案 1 :(得分:2)

为什么不可能:

等效表达式,使用conditional operator代替if

render: texts => (
  <span>
     {texts.includes(":")
       ? <b>{texts}</b>
       : <a>{texts}</a>
     }
  </span>
)