RN 写微博话题

作者: 一朝瑾秋色 | 来源:发表于2020-09-08 17:24 被阅读0次

格式

我们用##代表一个话题,输入框内在任意位置输入##就可以嵌入话题

效果图

image

实现逻辑

主要是解决输入框变色问题,这里用一个Text组件盖在输入框上面,输入框默认颜色设为透明

下面贴上代码

        <Text style={{ fontSize: 18, color: '#000', marginTop: 100 }}>输入话题试试看吧(##)</Text>
        <View
          style={{
            backgroundColor: 'green',
            width: '100%',
            height: 100
          }}
        >
          <TextInput
            maxLength={100}
            value={this.state.value}
            onChangeText={v => {
              let value = v
              if (value.length > this.state.value.length) {
                // 写入
                let lastStr = value.substr(v.length - 1)
                // console.log('lastStr = ', lastStr);
                if (lastStr === '#') {
                  let count = getCharCount(v, '#')
                  // console.log('#的次数 = ', count);
                  // 判断#是一对儿的第二个
                  if (count > 1 && count % 2 === 0) {
                    // 一对儿的第一个位置
                    let firstIndex = findCharIndex(v, '#', count - 1)
                    // console.log('firstIndex = ', firstIndex);
                    if (firstIndex !== -1) {
                      let frontStr = value.substring(0, firstIndex)
                      // console.log('frontStr = ', frontStr);
                      let behindStr = value.substr(firstIndex)
                      // console.log('behindStr = ', behindStr);
                      value = frontStr + ' ' + behindStr + ' '
                    }
                  }
                }
              }
              this.setState({
                value: value
              })
            }}
            multiline={true}
            numberOfLines={5}
            style={{
              backgroundColor: 'white',
              height: 100,
              fontSize: 16,
              paddingHorizontal: 10,
              paddingTop: 10,
              textAlignVertical: 'top',
              color: 'transparent'
            }}
          />
          {this.getTheme()}
        </View>

输入框的显示逻辑

  getTheme() {
    let list = this.state.value.split('#')
    let listView = []
    // console.log('list = ',this.state.value, list)
    for (let index = 0; index < list.length; index++) {
      const element = list[index]
      if (index % 2 === 0) {
        listView.push(<Text>{element}</Text>)
      } else if (index % 2 === 1 && index === list.length - 1) {
        listView.push(<Text>{'#' + element}</Text>)
      } else {
        listView.push(<Text style={{ color: 'orange' }}>{'#' + element + '#'}</Text>)
      }
    }
    return (
      <Text
        style={{
          position: 'absolute',
          top: 0,
          left: 0,
          marginHorizontal: 10,
          fontSize: 16,
          marginTop: 10
          // backgroundColor: 'red'
        }}
      >
        {listView.map(item => item)}
        {/* <Text>{this.state.value}</Text> */}
      </Text>
    )
  }

两个字符串处理方法


// 字符串中指定字符指定出现第num次的位置
export function findCharIndex(str: string, char, num: number) {
  let x = -1
  for (var i = 0; i < num; i++) {
    x = str.indexOf(char, x + 1)
  }
  return x
}

// 判断字符串是否包含某些字符串
export function checkChatIsValid(chatText: String, rule?) {
  let ruleArray = rule ? rule : config.chatTextRule
  let realText = chatText.replace(/\s*/g, '').toLowerCase() // 去除所有空格转小写
  if (ruleArray && ruleArray.length > 0) {
    for (let i = 0; i < ruleArray.length; i++) {
      if (realText.includes(ruleArray[i])) {
        return false
      }
    }
  }
  return true
}

相关文章

  • RN 写微博话题

    格式 我们用##代表一个话题,输入框内在任意位置输入##就可以嵌入话题 效果图 实现逻辑 主要是解决输入框变色问题...

  • 网络营销学习日记第十期—微博话题的运营

    如何运营好一个微博话题呢?首先我们要先了解什么是微博话题,以及微博话题的意义是什么,为什么要做微博话题。 微博话题...

  • 仿写微博 双井号 话题textview

    效果图 下载链接:https://github.com/MuRanJiangXia/CyanMarkTextview

  • 微博话题运营分析

    1、分析目的:兼具社交、信息属性的微博,在日常生活中,很大程度满足了用户掌握最新资讯内容和公域社交的需求。 而热搜...

  • 随笔2019.3.19

    作为一个资深的微博控,其实我写这个话题是很合适的,毕竟是一个已经玩了9年多微博的人了。今天我为什么突然想写一...

  • 我多想再见你 哪怕匆匆一眼就别离

    十二点,我打开微博看@微博搞笑排行榜每天的话题。那天题目是,写一句情话给你喜欢的人。我记得我写的是。你是我温暖的手...

  • 钎焊大王吴健创业连载日记17

    2018.5.19昆山天气多云 一、 前阵子在新浪微博#钎焊解答#话题里,每次一口气写5个常见问题出来,打开微博有...

  • 微博的世界真奇妙

    微博的世界真奇妙,有人收听,有人转发,有人评论,有人点赞。微博,写的是心情,玩的是互动,转的是话题,找的是知音。

  • 玩转超话,快速获取5000精准客源

    今天给大家分享一个是通过微博给微信引流,玩转超话快速获取5000精准客源。 什么是微博超级话题? 超级话题是微博上...

  • 你为什么不让座?因为我没素质吧

    01 关于让座的问题总是能迅速成为微博热搜的话题,开始写这句话之前,我特意打开微博,搜索了“让座”这个关键词,你看...

网友评论

    本文标题:RN 写微博话题

    本文链接:https://www.haomeiwen.com/subject/horjektx.html