分别为每个项目阅读更多内容

克里斯蒂安·穆斯卡卢

使用此代码我可以切换Continue reading Read less,但它适用于所有项目。

如何分别切换列表中的每个项目

代码笔

JS

handleReadMoreClick(item_id) {
    console.log(item_id)
    this.setState({ readMore: !this.state.readMore })
}


render(....
  let { readMore } = this.state

    <span key={item.id}>
        <p>{item.title}</p>
        <p>{item.date}</p>
        <p className={readMore ? "read-more" : "read-less"}>{item.text}</p>
        <p onClick={() => { this.handleReadMoreClick(item.id) }}>
            {
                readMore ? 
                <strong>Show less</strong>:
                <strong>Continue reading</strong>
            }
        </p>
    </span>

CSS

    .read-more{
        height: auto;
    }
    .read-less{
        height: 60px;
        overflow: hidden;
    }
拉杰什

问题是您为所有组件设置了一个标志。相反,您应该为每个项目设置 1 个标志。

最好的方法是创建一个组件,然后循环数据并创建组件列表。

class ToggleText extends React.Component {
  constructor (props){
    super(props);
    this.state={
      readMore: false,
    }
  }
  
  handleReadMoreClick() {
    this.setState({ readMore: !this.state.readMore })
  }
  
  render(){
    return (
      <span key={this.props.id}>
        <p>{this.props.title}</p>
        <p className={this.state.readMore ? "read-more" : "read-less"}>{this.props.text}</p>
        <p onClick={() => { this.handleReadMoreClick(this.props.id) }}>
          <b> { this.state.readMore ? 'Show less' : 'Continue reading' }</b> 
        </p>
      </span>
    )
  }
}

const Application = () => {
    let news_and_updates = [{"id": 1,"title": "Update: 1st Year Anniversary","date": "09/15/2016 02:36AM","text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam bibendum erat ut pulvinar tristique. Cras non dui volutpat, imperdiet arcu nec, commodo odio. Fusce sed consequat felis. Cras ut dapibus risus. Phasellus lectus odio, iaculis eu augue et, porttitor ultricies neque. Mauris dapibus ipsum arcu, non commodo ipsum fringilla a. Morbi gravida mi elementum pretium facilisis. Maecenas sit amet dui auctor, malesuada sapien id, ullamcorper tellus. Mauris condimentum posuere eros at commodo. Pellentesque ut tristique sem.","link": "https://www.nutaku.net/games/flower-knight-girl/news-updates/info/879" }, {"id": 2,"title": "Update: 1st Year Anniversary","date": "09/15/2016 02:36AM","text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam bibendum erat ut pulvinar tristique. Cras non dui volutpat, imperdiet arcu nec, commodo odio. Fusce sed consequat felis. Cras ut dapibus risus. Phasellus lectus odio, iaculis eu augue et, porttitor ultricies neque. Mauris dapibus ipsum arcu, non commodo ipsum fringilla a. Morbi gravida mi elementum pretium facilisis. Maecenas sit amet dui auctor, malesuada sapien id, ullamcorper tellus. Mauris condimentum posuere eros at commodo. Pellentesque ut tristique sem.","link": "https://www.nutaku.net/games/flower-knight-girl/news-updates/info/879" }, {"id": 3,"title": "Update: 1st Year Anniversary","date": "09/15/2016 02:36AM","text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam bibendum erat ut pulvinar tristique. Cras non dui volutpat, imperdiet arcu nec, commodo odio. Fusce sed consequat felis. Cras ut dapibus risus. Phasellus lectus odio, iaculis eu augue et, porttitor ultricies neque. Mauris dapibus ipsum arcu, non commodo ipsum fringilla a. Morbi gravida mi elementum pretium facilisis. Maecenas sit amet dui auctor, malesuada sapien id, ullamcorper tellus. Mauris condimentum posuere eros at commodo. Pellentesque ut tristique sem.","link": "https://www.nutaku.net/games/flower-knight-girl/news-updates/info/879" }]
    
    return (
      <div>      
        {
          news_and_updates.map((item) => <ToggleText {...item} /> )
        }
    </div>
    )
}

ReactDOM.render(<Application />, document.getElementById('app'));
.read-more{
  height: auto;
}
.read-less{
  height: 15px;
  overflow: hidden;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="app"></app>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Apollo GraphQL突变分别为列表中的每个项目加载

如何分别为每个div附加数据

XPath-如何分别为每个结果运行CONCAT?

分别为每个元素运行jQuery函数

如何编写javascript,分别为每个表创建fixedheader

熊猫:分别为每个类别计算Fuzzywuzzy

分别为每个DF运行lm模型

分别为每个li添加一个孩子

Ionic/Angular + Lottie:分别为每个 Lottie 设置动画?

在柱状图高图中分别为每个点着色

jQuery each()遍历列表项并分别为每个项做一些事情

复合主键是否还会分别为每个列创建索引?

如何分别为每个组的记录之间创建笛卡尔积?

如何分别为每个服务器运行Ansible任务

使用 ggplotly 分别为 r 中的每个图设置分面图的刻度

如何在实体框架中分别为每个人分组数据?

我是否需要分别为每个opengl上下文加载函数?

使用 CSS 在单击事件上分别为每个变换属性设置动画

Spinner 问题:如何在 Spinner 中调用列表项并分别为每个项使用数学?

.printout命令:为什么要分别为每个副本发送打印命令?

分别为数据点上色

如何分别为散点图的点着色?

分别为正值和负值设置颜色和 alpha

投币游戏的几率分别为50%和50%

require和load分别为“ load”和“ execute”的区别

ValueError:维度必须相等,但分别为 512 和 256

整数比较,分别为10和128

如何分别为 Trackpoint、Trackpad 和 Mouse 设置 xbindkey?

并排放置2个div框,它们的宽度和宽度分别为50%和100%,展开到100%时,每个框上的整个宽度都将悬停