通过三元运算符映射的数组分配失败?

时间:2019-06-22 16:02:15

标签: javascript reactjs ternary-operator arrow-functions

我是reactjs的新手,我正尝试使用三元运算符根据条件渲染jsx,但会引发错误:Line 22: Expected an assignment or function call and instead saw an expression no-unused-expressions。 这是代码:

const posts = this.state.posts.length > 0 ?
            this.state.posts.map(elem=>{
                <div class="col s12 m7">
                    <h2 class="header">{elem.title}</h2>
                    <div class="card horizontal">
                        <div class="card-stacked">
                            <div class="card-content">
                                <p>{elem.body}</p>
                            </div>
                            <div class="card-action">
                                <a href="#">This is a link</a>
                            </div>
                        </div>
                    </div>
                </div>
            })
            :null;

我尝试在括号this.state.posts.length > 0中包含( )为真的情况下的第一个返回值,但是效果不好。 预先感谢。

1 个答案:

答案 0 :(得分:1)

您需要从传递给map方法的函数中返回jsx。

在传递给return方法的函数中使用map

const posts =
  this.state.posts.length > 0
    ? this.state.posts.map(elem => {
        return (
          <div className="col s12 m7">
            <h2 className="header">{elem.title}</h2>
            <div className="card horizontal">
              <div className="card-stacked">
                <div className="card-content">
                  <p>{elem.body}</p>
                </div>
                <div className="card-action">
                  <a href="#">This is a link</a>
                </div>
              </div>
            </div>
          </div>
        );
      })
    : null;

您还可以将()用于隐式return

const posts =
  this.state.posts.length > 0
    ? this.state.posts.map(elem => (
        <div className="col s12 m7">
          <h2 className="header">{elem.title}</h2>
          <div className="card horizontal">
            <div className="card-stacked">
              <div className="card-content">
                <p>{elem.body}</p>
              </div>
              <div className="card-action">
                <a href="#">This is a link</a>
              </div>
            </div>
          </div>
        </div>
      ))
    : null;

还可以在jsx中将className用于class