在react.js中映射一个充满html元素的对象

时间:2018-09-12 08:33:16

标签: javascript json reactjs

我正在努力映射包含一些HTML元素的对象,我只想在我的ul中添加所有li元素。

我一直在尝试几种映射用法,但无法使其正常工作。

test(){ 

    var l;
    for(var i = 0; i <= this.props.paginationData.totalPage; i++){
        if (i == parseInt(this.props.paginationData.currentPage)){
            l += <li className="page-item active"><a className="page-link" href="#">{this.props.paginationData.currentPage}</a></li>
        }
        else{
            l += <li className="page-item"><a className="page-link" onClick={()=>this.props.search(this.props.sortData.orderby, this.props.sortData.sens, this.props.searchTerm, i)} >Précedent</a></li>
        }
    }
    return l

}
render(){



    if (this.props.paginationData.totalPage <= 5){
        return(


            <div className="container">     
                <ul className="pagination"> 
                    {this.test().map(obj => {obj.l} )}
                 </ul>
            </div>  
        )}

谢谢!

3 个答案:

答案 0 :(得分:0)

我花了一些时间来缩进您的代码,并修复了您犯的一些错误,例如:

  {this.test().map(val => {
    val; // map already return the value inside the object you don't need to do val.l
  })}

  let l = [];
  for (let i = 0; i <= this.props.paginationData.totalPage; i++) {
  // using scoping declaration variable to avoid scope trouble

另外,您的l是一个字符串,如果要对其进行迭代,则它应该是一个数组。  也可以通过在{ this.test() } int jsx中简单地渲染字符串来完成此操作,下面的示例使用数组

test() {
  let l = [];
  for (let i = 0; i <= this.props.paginationData.totalPage; i++) {
    if (i == parseInt(this.props.paginationData.currentPage)) {
      l.push(
        <li className="page-item active">
          <a className="page-link" href="#">
            {this.props.paginationData.currentPage}
          </a>
        </li>
      );
    } else {
      l.push(
        <li className="page-item">
          <a
            className="page-link"
            onClick={() =>
              this.props.search(
                this.props.sortData.orderby,
                this.props.sortData.sens,
                this.props.searchTerm,
                i
              )
            }>
            Précedent
          </a>
        </li>
      );
    }
  }
  return l;
}
render() {
  if (this.props.paginationData.totalPage <= 5) {
    return (
      <div className="container">
        <ul className="pagination">
          {this.test().map(val => {
            val;
          })}
        </ul>
      </div>
    );
  }
}

答案 1 :(得分:0)

我试图简化一下您在这里所做的事情。那么这个解决方案呢?

render() {
    let paginationButtons = [];
    this.props.paginationData.forEach((button, index) => {
        if (index !== this.props.paginationData.currentPage) {
            paginationButtons.push(<li className="page-item"><a className="page-link" onClick={()=>this.props.search(this.props.sortData.orderby, this.props.sortData.sens, this.props.searchTerm, i)} >Précedent</a></li>);
        }
        else {
            paginationButtons.push(<li className="page-item active"><a className="page-link" href="#">{index}</a></li>);
        }
    })
    return (
        <div className="container">     
            <ul className="pagination"> 
                {paginationButtons}
             </ul>
            }
        </div>  
    )
}

您当然可以将return之前的零件迁移到test()之类的单独函数,并像{this.test()}一样在渲染中使用它。

答案 2 :(得分:0)

_getPaginationButtons = (paginationData)=>{
return paginationData.map((res,key)=>{
    if (key !== this.props.paginationData.currentPage) {
      return (<li className="page-item"><a className="page-link" onClick={()=>this.props.search(this.props.sortData.orderby, this.props.sortData.sens, this.props.searchTerm, i)} >Précedent</a></li>))
     }

   else {
    return (<li className="page-item active"><a className="page-link" href="#">{index}</a></li>)
    })
    }


    render() {
    const {paginationData} = this.props
        return (
            <div className="container">     
                <ul className="pagination"> 
                    {this._getPaginationButtons(paginationData)}
                 </ul>
                }
            </div>  
        )
    }

我不知道您的if语句逻辑是什么,但它应该可以工作