javascript - 如何在 react 中的一组元素中识别单个 div 元素?

标签 javascript html css reactjs

我有一个 React 应用程序,其中包含用于创建一些卡片的 Div 元素列表。每张卡片都有“阅读更多”按钮来展开和折叠一个段落,我每次点击鼠标都会切换它。 我的问题是,对于每次点击,它都会展开所有卡片中的段落,而不是我点击的卡片中的段落。所以我无法识别点击的(这个)卡片

组件:

class BidCard extends Component {
    constructor(props) {
        super(props);
        this.state = {
            readMoreOpen: false,
        }
    }

    readMore() {
        this.setState({ readMoreOpen: !this.state.readMoreOpen })
    }

    render() {

        const { articles } = this.props;

        return (
            articles.map(article => {
                return (
                    <div className="projectCardRoot" key={article.id}>
                        <div className="projectCardMainLogin">
                            <div className="projectCardMiddle">
                                <p className={this.state.readMoreOpen ? 'openFullParagraph' : 'closeFullParagraph'} id="projectCardDesc">{article.description}</p>
                                <div className="cardReadMore desktopDiv" onClick={this.readMore.bind(this)}>Read more</div>
                            </div>
                        </div>
                    </div>
                )
            })
        )
    }
}

export default BidCard;

我该如何解决这个问题?

最佳答案

您可以将扩展卡的 id 保存到状态并在渲染元素时检查它:

class BidCard extends Component {
  constructor(props) {
    super(props);
    this.state = {
      readMoreOpen: [],  // Use array here
    }
  }

  // Add card id to the expanded array if not already there, otherwise remove it
  readMore = (id) => {
    this.setState(state => {
      if (state.readMoreOpen.includes(id)) {
        return {readMoreOpen: state.readMoreOpen.filter(readId => readId !== id)}
      }
     return {readMoreOpen: [...state.readMoreOpen, id]}
    })
  }

  render() {

    const { articles } = this.props;

    return (
      articles.map(article => {
        return (
          <div className="projectCardRoot" key={article.id}>
            <div className="projectCardMainLogin">
              <div className="projectCardMiddle">
                {/*Check if the item is in expanded items array */}
                <p className={this.state.readMoreOpen.includes(article.id) ? 'openFullParagraph' : 'closeFullParagraph'} id="projectCardDesc">{article.description}</p>
                <div className="cardReadMore desktopDiv" onClick={() => this.readMore(article.id)}>Read more</div>
              </div>
            </div>
          </div>
        )
      })
    )
  }
}

关于javascript - 如何在 react 中的一组元素中识别单个 div 元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57884346/

相关文章:

javascript - Sharepoint - 使用 CLI Webpack 的 Angular 2 应用程序

javascript - 为什么 javascript `arr.filter(() => true)` 删除空洞?

javascript - 通过 javascript 或 jQuery Cookie 函数

javascript - 如何生成多个带有选项标签的 <select> 元素?

javascript - 在列表的初始渲染上动画列表项(交错)

javascript - 如何从无处提交按钮?

javascript - 使用 javascript 验证每个输入字段 Bootstrap 表单,无需点击提交按钮

javascript - 如何使用 srcset 延迟加载图像?

html - Android Firefox 上的字体更大

html - 如何根据溢出元素的宽度将内容居中?