我看到过多个npm
包使用单个文本子组件来实现这一点,但它们似乎都不支持多个文本子组件。
例如,我想对一个有2个<p />
子节点的组件实现Read More/Read Less:
function ReadMoreComponent (props) {
return (
<p>Paragraph 1</p>
<p>Paragraph 2</p>
)
}
字符串
如果Paragraph 1
足够长,ReadMoreComponent
将部分呈现Paragraph 1
并显示Read More按钮。如果Paragraph 1
短于限制,ReadMoreComponent
将在显示Read More按钮之前显示整个Paragraph 1
和Paragraph 2
的一部分。
是否可以在有多个文本子组件的React组件上实现Read More/Read Less功能?
2条答案
按热度按时间q9yhzks01#
你可以尝试这样做。添加一些函数,可以使你的子组件的简短版本:
字符串
创建你的React组件,并使用它的状态来切换短/长模式:
型
使用您的组件:
型
xytpbqjk2#
在您的情况下,您需要一个接受HTML元素(作为react元素)而不仅仅是字符串的组件,然后根据您指定的限制截断要显示的最终文本。
您可以解析输入,访问元素的子元素,直到到达字符串,然后计算字符串中的字符数,在达到最大字符数后截断并停止该过程。
下面是一个执行此操作的组件示例:
字符串
请记住,该组件要求子组件包含最终文本(或不包含文本)。它不会访问其他属性(如
text
或title
属性),但这对于HTML组件应该是没问题的。上面的组件本身不受HTML的约束,并且除了react之外不需要其他库,因此它也可以在react native中使用。
您可以在代码中包含此组件,添加按钮以显示更多或更少的文本,然后根据需要设置按钮的样式。
我创建了一个库来完成这个任务,如果您不想在项目中添加所有组件代码,我还创建了一个易于自定义的Web组件。
使用以下各项安装库:
型
下面是如何使用该库的示例:
型
使用CSS:
型
您可以看到here网络演示和here本地演示。“
如果不想安装其他库,也可以将这些演示用作参考,并将ReadMore和ReadMoreWeb组件直接包含在项目中。