最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 【React Native】如何实现一个自动高亮的<Text>组件

    正文概述 掘金(konh)   2021-07-06   769

    这是我参与新手入门的第1篇文章。


    难度 *

    通过这篇文章熟悉创建React Native组件时的思路及步骤。

    需求

    在一段文字中高亮显示某词,在React Native中需要嵌套组件,也就是如下实现:

    	<Text>
    		<Text style={{textDecorationLine:'underline'}}>
    			离开
    		</Text>
    		去查看借阅状态
    	</Text>
    

    这种写法在我看来可能叫做硬编码,不仅写的时候麻烦,而且放在实际业务中,也会使代码看起来比较凌乱。

    编写

    所以我们接下来会写一个组件代替这种写法。在编写组件之前,我会先想想我将如何使用这个组件。

    //我的理想使用方式是这样的
    <LighText 
    	keys={['离开']} 
    	lighStyle={{textDecorationLine:'underline'}}>
    离开去查看借阅状态
    </LighText>
    

    这个组件的实现方式是将一段文字通过关键词拆分开,分别用高亮及默认状态创建他们。


    这段代码的思路是使用递归的思想,在一段字符串中寻找关键词,找到关键词后拆分,将段前,关键词,段尾加入数组,这样关键词会一直是偶数索引,默认文字是奇数索引。然后重复这个过程,直到找不到关键词为止,下面为实现代码:

    /*
    *将一段文字的重点部分单独用text标签包裹
    *@return [] 数组偶数为高亮显示内容
    */
    const markKeys = (title, keys) => {
            const split = (arr, keys) => {
                //接收字符串
                arr.forEach(item => {
                    let arrs, key
                    for (let index = 0; index < keys.length; index++) {
                        const word = keys[index]
                        if (item.indexOf(word) > -1) {
                            arrs = item.split(word)
                            key = word
                            break
                        }
                    }
                    if (!arrs) {
                        return false
                    }
                    //有多个关键词时,将会产生重复字符串
                    let index = result.indexOf(item)
                    if (index > -1) {
                        result.splice(index, 1)
                    }
                    //保留
                    result.push(arrs[0])
                    result.push(key)
                    result.push(arrs[1])
                    split(arrs, keys)
                })
            }
            let arr = [title] //接收到的字符串
            let result = []
            split(arr, keys)
            return result
        }
    

    本来想把组件的代码也写出来,后来发现这类的代码贴出来之后显得很啰嗦,所以就交给屏幕前的你们了~

    总结

    温故而知新,写完这篇文章下来,发现问题不少。写的这段代码虽然实现功能了,但是基本可以打0分。我的第N篇文章会对这段代码进行优化修改,到时候会把优化过程及思路贴出来。


    起源地下载网 » 【React Native】如何实现一个自动高亮的<Text>组件

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元