迹忆客 专注技术分享

当前位置:主页 > 学无止境 > WEB前端 > React >

如何在 React 中创建阅读更多/更少按钮

作者:迹忆客 最近更新:2022/10/19 浏览次数:

在构建 Web 应用程序时,有时我们需要显示一些长文本。在这种情况下,一个聪明的设计是只显示部分文本并添加一个显示更多按钮供用户在需要时展开文本。当文本已展开并完全显示时,有一个 Show Less 按钮可将其折叠。

下面的完整示例向您展示了如何做到这一点。

应用预览

React 中创建阅读更多或更少按钮

代码

1.创建一个全新的 React 项目:

$ npx create-react-app kindacode-example

会自动生成一堆文件和文件夹。无论如何,我们只关心 2 个文件:src/App.js和src/App.css。

  1. src/App.js中,我们创建了一个名为ExpandableText的可重用组件(我们可以将它放在一个单独的文件中以保持内容井井有条)。该组件可以采用 2 个 props:children(文本)和descriptionLength(初始显示的最大字符数)。这是src/App.js的完整源代码和解释:
// jiyik.com
// src/App.js
import { useState } from 'react';
import './App.css';

// Createa reusable Read More/Less component
const ExpandableText = ({ children, descriptionLength }) => {
  const fullText = children;

  // Set the initial state of the text to be collapsed
  const [isExpanded, setIsExpanded] = useState(false);

  // This function is called when the read more/less button is clicked
  const toggleText = () => {
    setIsExpanded(!isExpanded);
  };

  return (
    <p className='text'>
      {isExpanded ? fullText : `${fullText.slice(0, descriptionLength)}...`}
      <span onClick={toggleText} className='toggle-button'>
        {isExpanded ? 'Show less' : 'Show more'}
      </span>
    </p>
  );
};

// Main App
function App() {
  return (
    <>
      <div className='container'>
        <div className='card'>
          <h1 className='title'>Welcome To jiyik.com</h1>
          <p>
            {/* Only show 120 characters in the beginning */}
            <ExpandableText descriptionLength={120}>
              Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec ut
              egestas mauris. Maecenas leo mauris, accumsan vel velit ac,
              blandit lobortis est. Vivamus in erat ac magna faucibus placerat
              eget non ligula. Aliquam consequat rhoncus turpis a convallis.
              Pellentesque ac sapien rhoncus, congue nibh eget, finibus turpis.
              Aenean volutpat malesuada augue, at lacinia dolor volutpat congue.
              Ut sit amet nunc ac arcu imperdiet iaculis. Mauris sit amet quam
              ut nisi blandit blandit congue nec lorem. Mauris viverra, quam non
              aliquet pellentesque, lorem risus fermentum mi, a mollis turpis
              velit vitae nulla. Proin auctor, elit a rhoncus vulputate, est
              magna facilisis ipsum, non mattis sem odio in neque. Cras at
              ultricies eros. Ut risus turpis, consequat sed auctor nec, rutrum
              id mauris.
            </ExpandableText>
          </p>
        </div>

        <div className='card'>
          <h1 className='title'>Just A Dummy Title</h1>
          <p>
            {/* Show 200 characters in the beginning */}
            <ExpandableText descriptionLength={200}>
              Aliquam maximus, purus vel tempus luctus, libero ipsum consectetur
              purus, eu efficitur mi nunc sed purus. Etiam tristique sit amet
              nisi vel rhoncus. Vestibulum porta, metus sit amet tincidunt
              malesuada, dui sapien egestas magna, quis viverra turpis sapien a
              dolor. Fusce ultrices eros eget tincidunt viverra. Ut a dapibus
              erat, vel cursus odio. Phasellus erat enim, volutpat vel lacus eu,
              aliquam sodales turpis. Fusce ipsum ex, vehicula tempor accumsan
              nec, gravida at eros. In aliquam, metus id mollis interdum, nunc
              sem dignissim quam, non iaculis tortor erat nec eros. Nunc
              sollicitudin ac dolor eget lobortis. Aenean suscipit rutrum dolor
              in euismod. Curabitur quis dapibus lectus. Mauris enim leo,
              condimentum ac elit sit amet, iaculis vulputate sem.
            </ExpandableText>
          </p>
        </div>
      </div>
    </>
  );
}

export default App;

CSS 是本次演示的重要组成部分。删除src/App.css中的所有默认代码并添加以下内容:/* src/App.css */

.container {
  width: 80%;
  margin: 50px auto;
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
}

.card {
  width: 43%;
  padding: 15px 20px;
  background: #fffde7;
  box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.2);
  border-radius: 10px;
}

.text {
  width: 100%;
}

/* Style the read more/less button */
.toggle-button {
  margin-left: 7px;
  color: blue;
  cursor: pointer;
}

.toggle-button:hover {
  color: red;
  text-decoration: underline;
}

完成。现在让我们的应用程序启动并运行,然后转到 http://localhost:3000 进行测试。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Node.js 与 React JS 的比较

发布时间:2023/03/27 浏览次数:137 分类:Node.js

本文比较和对比了两种编程语言,Node.js 和 React。React 和 Node.js 都是开源 JavaScript 库的示例。 这些库用于构建用户界面和服务器端应用程序。

在 React 中循环遍历对象数组

发布时间:2023/03/18 浏览次数:124 分类:React

在 React 中循环对象数组: 使用 map() 方法迭代数组。 我们传递给 map() 的函数会为数组中的每个元素调用。 该方法返回一个新数组,其中包含传入函数的结果。 export default function App (

获取 React 中元素的类名

发布时间:2023/03/18 浏览次数:162 分类:React

在 React 中使用 event.target 获取元素的类名 获取元素的类名: 将元素上的 onClick 属性设置为事件处理函数。 访问元素的类名作为 event.currentTarget.className 。 export default function App () { cons

如何将 key 属性添加到 React 片段

发布时间:2023/03/18 浏览次数:152 分类:React

使用更详细的片段语法将 key 属性添加到 React 片段,例如 React.Fragment key={key} 。 更冗长的语法实现了相同的结果对元素列表进行分组,而不向 DOM 添加额外的节点。 import React from react

如何在 React 中删除事件监听器

发布时间:2023/03/15 浏览次数:203 分类:React

在 React 中删除事件监听器: 在 useEffect 挂钩中添加事件侦听器。 从 useEffect 挂钩返回一个函数。 当组件卸载时,使用 removeEventListener 方法移除事件监听器。 import {useRef, useEffect} from r

React 中在 map() 中使用条件跳出map

发布时间:2023/03/15 浏览次数:198 分类:React

React 中在 map() 中使用条件: 在数组上调用 map() 方法。 使用 if 条件,如果条件满足则显式返回。 否则返回不同的值或返回 null 以不呈现任何内容。 export default function App () { const arr =

在 React 中调用多个 onClick 函数

发布时间:2023/03/15 浏览次数:160 分类:React

在 React 中调用多个 onClick 函数: 在元素上设置 onClick 属性。 在事件处理函数中调用其他函数。 事件处理函数可以根据需要调用尽可能多的其他函数。 export default function App () { const s

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便