使用循环和ifs在componentDidMount中设置状态

时间:2019-03-13 11:56:52

标签: javascript reactjs sharepoint react-router

我有一个提供程序,可为新闻文章(带有新闻的列表)提供标签。如果它们超过三个,则将附加标签(> 3)组合在一起(在示例代码中称为plusTags)。我可以在控制台中看到所有标签,但是它们分布不正确。例如。

在第一页上,我有四个新闻,分布的标签分别为“ a,b,c”,“ b”,“ ac”和“ b”。在下一页,新闻文章(显然)是不同的,但是分布标签的名称与首页中的相同(“ a,b,c”,“ b”,“ ac”,“ b”),即使标签应该不同。因此,分布遵循相同的模式。我怀疑这是我在“ componentDidMount”函数中的代码,因为在那里我分发了所有标签。怀疑它会重复,因为此功能会重复吗?

public componentDidMount(): void {
  let tags = [];
  let plusTags = [];

  if (this.props.tags != null) {
    if (this.props.tags.length > 0) {
      for (var i = 0; i < 3; i++) {
        if (this.props.tags[i] != undefined) {
          tags.push(this.props.tags[i] + " ");
        }
      }

      for (var j = this.props.tags.length - 1; j >= 3; j--) {
        if (this.props.tags[i] != undefined) {
          plusTags.push(this.props.tags[j] + " ");
        }
      }
    } else {
      tags = this.props.tags;
    }
  }

  this.setState({
    tags: tags,
    plusTags: plusTags
  });
}

以及在我的渲染器中

public render(): React.ReactElement<INewsTagsProps> {
   return <React.Fragment>
     <div className={styles.tagContainer}>
    {
      this.state.tags ? 
      this.state.tags.map((t) => {
        if (this.props.background == BackgroundType.None) {
          return (
            <a href={this.props.tagPageUrl + "?tag="+ t}>
              <span className={styles.tagNewsTiles}>{t}</span>
            </a>);
        }
        else {
          return(
            <a href={this.props.tagPageUrl + "?tag="+ t}>
              <span className={styles.tagFollowedNews}>{t}</span>
          </a>);
        }
      })
      : null 
    }
    {this.state.plusTags.length > 0 ?  
      <span className={`callout-target-${this.state.targetIndex} ${this.props.background == BackgroundType.None ? styles.tagNewsTiles : styles.tagFollowedNews}`} 
      onClick={(e) => {e.stopPropagation(); this.setState({plusTagsDialogOpen: true});}}>+ {this.state.plusTags.length}</span>
      :
      null
    }
   </div>
   <Callout
          className="ms-CalloutExample-callout"
          gapSpace={0}
          target={this.state.target}
          onDismiss={() => this.closeDialog()}
          hidden={!this.state.plusTagsDialogOpen}
          isBeakVisible={true}
          beakWidth={10}              
          directionalHint={DirectionalHint.topCenter}
      >

  <div className={styles.tagPopupWrapper}>
     <div className={styles.tagPopupContainer}>
      {this.state.plusTags ? 
        this.state.plusTags.map((t) => {
        if (this.props.background == BackgroundType.None) {
          return (
            <a href={this.props.tagPageUrl+ "?tag="+t}>
              <span className={styles.tagNewsTiles}>{t}</span>
            </a>);
        }
        else {
          return(
            <a href={this.props.tagPageUrl+ "?tag="+t}>
              <span className={styles.tagFollowedNews}>{t}</span>
            </a>);
        }
      }):
      null}
      </div>
    </div>              
  </Callout>       

;

0 个答案:

没有答案