乐闻世界logo
搜索文章和话题

How do I truncate text and display a read more button in React if the text goes past a certain amount of lines?

6 个月前提问
5 个月前修改
浏览次数56

1个答案

1

在React中实现文本的截断以及添加“阅读更多”按钮,通常可以通过以下几个步骤进行:

步骤 1: 定义组件状态

首先,我们需要在组件的状态中定义一个布尔变量,用来标记文本是否被完全显示。我们可以命名为 isExpanded

jsx
const [isExpanded, setIsExpanded] = useState(false);

步骤 2: 文本截断逻辑

接着,我们需要定义文本和截断的逻辑。假设我们有一个变量 text 存储了要显示的全部文本,我们可以创建一个变量 displayText 来根据 isExpanded 的状态决定显示全部文本或是部分文本。

jsx
const MAX_LINES = 3; // 示例中,假设我们希望显示3行文本 const text = "这里是非常长的文本......"; // 这里是完整的文本内容 let displayText = isExpanded ? text : text.split("\n").slice(0, MAX_LINES).join("\n") + "...";

这里使用了字符串的 splitslice 方法来截断文本。注意,"\n" 是按行分割文本的标记,这取决于你的文本如何定义行。

步骤 3: 切换展开/收起状态

我们需要定义一个方法来切换 isExpanded 的状态,从而控制文本的展示。

jsx
const toggleExpand = () => { setIsExpanded(!isExpanded); };

步骤 4: 渲染组件

最后,在组件的 render 方法或函数组件的返回部分,我们将显示 displayText 和一个按钮来控制文本的展开与收起。

jsx
return ( <div> <p>{displayText}</p> <button onClick={toggleExpand}> {isExpanded ? "阅读更少" : "阅读更多"} </button> </div> );

完整示例

将上述代码片段整合,我们可以得到如下的React组件:

jsx
import React, { useState } from 'react'; function ReadMoreComponent({ fullText }) { const [isExpanded, setIsExpanded] = useState(false); const MAX_LINES = 3; let displayText = isExpanded ? fullText : fullText.split("\n").slice(0, MAX_LINES).join("\n") + "..."; const toggleExpand = () => { setIsExpanded(!isExpanded); }; return ( <div> <p>{displayText}</p> <button onClick={toggleExpand}> {isExpanded ? "阅读更少" : "阅读更多"} </button> </div> ); } export default ReadMoreComponent;

这样,你就可以在任何需要的地方使用 <ReadMoreComponent fullText="你的长文本..." /> 来实现‘阅读更多’的功能。

2024年6月29日 12:07 回复

你的答案