Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在不使用库的情况下显示三行文字后的“阅读更多文字”_Javascript_Reactjs_React Native - Fatal编程技术网

Javascript 如何在不使用库的情况下显示三行文字后的“阅读更多文字”

Javascript 如何在不使用库的情况下显示三行文字后的“阅读更多文字”,javascript,reactjs,react-native,Javascript,Reactjs,React Native,我正在创建一个应用程序,我需要显示的文本应该只显示3行。如果文本已超过,则显示阅读更多内容或隐藏。我正在使用以下代码 class CustomLabel extends React.Component { render() { return ( <View> <Text> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed d

我正在创建一个应用程序,我需要显示的文本应该只显示3行。如果文本已超过,则显示
阅读更多内容
隐藏
。我正在使用以下代码

class CustomLabel extends React.Component {

  render() {
    return (
      <View>        
        <Text>
          Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
          eiusmod tempor. Lorem ipsum dolor sit amet, consectetur adipiscing
          elit, sed do eiusm Lorem ipsum dolor sit amet, consectetur adipiscing
          elit, sed do eiusmod tempor. Lorem ipsum dolor sit amet, consectetur
          adipiscing elit, sed do eiusm Lorem ipsum dolor sit amet, consectetur
          adipiscing elit, sed do eiusmod tempor. Lorem ipsum dolor sit amet,
          consectetur adipiscing elit, sed do eiusm Lorem ipsum dolor sit amet,
          consectetur adipiscing elit, sed do eiusmod tempor. Lorem ipsum dolor
          sit amet, consectetur
        </Text>
      </View>
    );
  }
}
类CustomLabel扩展了React.Component{
render(){
返回(
Lorem ipsum dolor sit amet,圣职精英,sed do
暂时性同侧盲症(eiusmod Temporal.Lorem ipsum dolor sit amet,Concertetur Adipising)
Elite,我的知识是平等的
埃利特,我是一名临时律师,我是一名律师
再见,精英们,请继续努力
一位杰出人士,他是一位临时总统,
作为一名杰出的领导者,我们应该为自己的事业贡献力量,
作为一名杰出的职业者,我的职业是暂时的
坐在阿梅特,康塞特图尔
);
}
}

有几种方法可以做到这一点,但总体思路是确定你的身高需要多少才能适应你的3条线(或者你的临界值是多少)。一旦你有了它,你就可以隐藏溢出并实现你的showmore/less逻辑

p{
高度:55px;
溢出:隐藏;
}
Lorem ipsum door sit amet,Concetetur adipising elit,sed do eiusmod tempor。我的知识是:我的知识是:我的知识是:我的知识是:我的知识是:我的知识是:我的知识是:我的知识是:我的知识是:我的知识是:我的知识是:我的知识是:我的知识是:我的知识是:我的知识是:我的知识是:我的知识是:我的知识。同侧阴唇
阿梅特、阿迪皮斯特、阿迪皮斯特、阿迪皮斯特、阿迪皮斯特、阿迪皮斯特、阿迪皮斯特、阿迪皮斯特。我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我
elit,我是临时雇员。知识产权不受约束,知识产权不受约束,知识产权不受约束,知识产权不受约束。我的知识是:我的知识是:我的知识是:我的知识是:我的知识是:我的知识是:我的知识是:我的知识是:我的知识是:我的知识是:我的知识是:我的知识是:我的知识是:我的知识是:我的知识是:我的知识是:我的知识是:我的知识。同侧阴唇
阿梅特、阿迪皮斯特、阿迪皮斯特、阿迪皮斯特、阿迪皮斯特、阿迪皮斯特、阿迪皮斯特、阿迪皮斯特。我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我
elit,我是临时雇员。知识产权不受约束,知识产权不受约束,知识产权不受约束,知识产权不受约束。我的知识是:我的知识是:我的知识是:我的知识是:我的知识是:我的知识是:我的知识是:我的知识是:我的知识是:我的知识是:我的知识是:我的知识是:我的知识是:我的知识是:我的知识是:我的知识是:我的知识是:我的知识。同侧阴唇
阿梅特、阿迪皮斯特、阿迪皮斯特、阿迪皮斯特、阿迪皮斯特、阿迪皮斯特、阿迪皮斯特、阿迪皮斯特。我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我
elit,我是临时雇员。知识产权不受约束,知识产权不受约束,知识产权不受约束,知识产权不受约束。我的知识是:我的知识是:我的知识是:我的知识是:我的知识是:我的知识是:我的知识是:我的知识是:我的知识是:我的知识是:我的知识是:我的知识是:我的知识是:我的知识是:我的知识是:我的知识是:我的知识是:我的知识。同侧阴唇
阿梅特、阿迪皮斯特、阿迪皮斯特、阿迪皮斯特、阿迪皮斯特、阿迪皮斯特、阿迪皮斯特、阿迪皮斯特。我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我爱我

elit,我是临时雇员。Lorem ipsum dolor sit amet,Concertetur

最简单的方法是使用numberOfLines={3}

class CustomLabel extends React.Component {

  render() {
    return (
      <View>        
        <Text numberOfLines={3}>
          Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
          eiusmod tempor. Lorem ipsum dolor sit amet, consectetur adipiscing
          elit, sed do eiusm Lorem ipsum dolor sit amet, consectetur adipiscing
          elit, sed do eiusmod tempor. Lorem ipsum dolor sit amet, consectetur
          adipiscing elit, sed do eiusm Lorem ipsum dolor sit amet, consectetur
          adipiscing elit, sed do eiusmod tempor. Lorem ipsum dolor sit amet,
          consectetur adipiscing elit, sed do eiusm Lorem ipsum dolor sit amet,
          consectetur adipiscing elit, sed do eiusmod tempor. Lorem ipsum dolor
          sit amet, consectetur
        </Text>
      </View>
    );
  }
}
类CustomLabel扩展了React.Component{
render(){
返回(
Lorem ipsum dolor sit amet,圣职精英,sed do
暂时性同侧盲症(eiusmod Temporal.Lorem ipsum dolor sit amet,Concertetur Adipising)
Elite,我的知识是平等的
埃利特,我是一名临时律师,我是一名律师
再见,精英们,请继续努力
一位杰出人士,他是一位临时总统,
作为一名杰出的领导者,我们应该为自己的事业贡献力量,
作为一名杰出的职业者,我的职业是暂时的
坐在阿梅特,康塞特图尔
);
}
}
输出:

Lorem ipsum dolor sit amet,圣公会精英,sed do
埃乌斯莫德临时机场。Lorem ipsum door sit amet,concetetur adipising

elit,我是说,我是说,我是说,我是说

这门课可能会帮助你达到你想要的结果。以下是
ReadMore
组件

import React from 'react';
import {StyleSheet, Text, View} from 'react-native';

export default class ReadMore extends React.Component {
  state = {
    measured: false,
    shouldShowReadMore: false,
    showAllText: false,
  };

  async componentDidMount() {
    this._isMounted = true;
    await nextFrameAsync();

    if (!this._isMounted) {
      return;
    }

    // Get the height of the text with no restriction on number of lines
    const fullHeight = await measureHeightAsync(this._text);
    this.setState({measured: true});
    await nextFrameAsync();

    if (!this._isMounted) {
      return;
    }

    // Get the height of the text now that number of lines has been set
    const limitedHeight = await measureHeightAsync(this._text);

    if (fullHeight > limitedHeight) {
      this.setState({shouldShowReadMore: true}, () => {
        this.props.onReady && this.props.onReady();
      });
    } else {
      this.props.onReady && this.props.onReady();
    }
  }

  componentWillUnmount() {
    this._isMounted = false;
  }

  render() {
    let {measured, showAllText, shouldShowReadMore} = this.state;

    let {numberOfLines, containerStyle} = this.props;

    return (
      <View style={[styles.containerStyle, containerStyle || {}]}>
        <Text
          numberOfLines={measured && !showAllText ? numberOfLines : 0}
          style={[this.props.textStyle, {flexShrink: 2}]}
          ref={(text) => {
            this._text = text;
          }}>
          {this.props.children}
        </Text>
        {this.renderHide()}
        {this.renderReadMore()}
      </View>
    );
  }

  _handlePressReadMore = () => {
    this.setState({showAllText: true});
  };

  _handlePressReadLess = () => {
    this.setState({showAllText: false});
  };

  renderReadMore() {
    let {shouldShowReadMore, showAllText} = this.state;

    return shouldShowReadMore && !showAllText ? (
      <Text
        style={styles.truncateTextStyle}
        onPress={this._handlePressReadMore}>
        See More
      </Text>
    ) : null;
  }

  renderHide() {
    let {shouldShowReadMore, showAllText} = this.state;

    return shouldShowReadMore && showAllText ? (
      <Text
        style={styles.truncateTextStyle}
        onPress={this._handlePressReadLess}>
        Hide
      </Text>
    ) : null;
  }
}

function measureHeightAsync(component) {
  return new Promise((resolve) => {
    component.measure((x, y, w, h) => {
      resolve(h);
    });
  });
}

function nextFrameAsync() {
  return new Promise((resolve) => requestAnimationFrame(() => resolve()));
}

const styles = StyleSheet.create({
  button: {
    color: '#888',
    marginTop: 5,
  },
  truncateTextStyle: {
    lineHeight: 18,
    color: "#ffffff",
    marginTop: 10,
    // backgroundColor: 'red',
    alignSelf: 'flex-start',
    paddingVertical: 5,
    paddingRight: 10,
  },
  containerStyle: {
    marginHorizontal: 20,
  },
});
从“React”导入React;
从“react native”导入{样式表、文本、视图};
导出默认类ReadMore扩展React.Component{
状态={
测量:假,
shouldShowReadMore:错,
showAllText:false,
};
异步组件didmount(){
这个。_isMounted=true;
等待nextFrameAsync();
如果(!此._已安装){
回来
}
//获取文本的高度,不限制行数
const fullHeight=等待测量高度同步(此文本);
this.setState({measured:true});
等待nextFrameAsync();
如果(!此._已安装){
回来
}
//现在已设置行数,请获取文本的高度
const limitedHeight=等待测量高度同步(此文本);
如果(全高>限制高度){
this.setState({shouldShowReadMore:true},()=>{
this.props.onReady&&this.props.onReady();
});
}否则{
this.props.onReady&&this.props.onReady();
}
}
组件将卸载(){
这个。_isMounted=false;
}
render(){
让{测量,昭和
import React from 'react';
import { Text, View } from 'react-native';

const Example = () => {
  return (
    <View>
       <ReadMore numberOfLines={3}>
         <Text style={styles.readMoreTextStyle}>
           Lorem Ipsum Lorem Ipsum Lorem Ipsum
         </Text>
      </ReadMore>
    </View>
  )
}
export default Example;