22/9/29 taro开发小程序问题

160 阅读2分钟
  1. 微信小程序不支持复杂正则表达式,简单的正则表达式也需要用new RegExp()的方法生成。
  2. taro的input组件,在微信小程序上运行时,onInput限制输入number类型,会无法限制 微信小程序中表单组件不是完全受控的,Input 组件输入后,视图立即变化,但其 value 绑定的值还是旧值,这时你直接 setState 一个旧值会被 Taro 的 diff 过滤掉。
    taro-docs.jd.com/taro/docs/d…
    解决的办法在于视图改变时,立即同步 data,然后setTimeout再对 data 值进行进一步修改。
let value = e.detail.value
    setInputValue(value)
    /**
     * 微信小程序中表单组件不是完全受控的,Input 组件输入后,视图立即变化,但其 value 绑定的值还是旧值,这时你直接 setState 一个旧值会被 Taro 的 diff 过滤掉。
     * 解决的办法在于视图改变时,立即同步 data,然后setTimeout再对 data 值进行进一步修改。
    */
    if (type ==='number' && value) {
      setTimeout(() => {
        value = value.replace(/[^0-9\.-]/g, '')     // 移除 数字 负号 小数点 之外的所有字符
        if (positiveOnly) {
          value = value.replace('-', '')
        } else {
          const lastMinusIndex = value.lastIndexOf('-')   // 截取非第一个负号之外的负号
          if (lastMinusIndex > 0) {
            value = value.slice(0, lastMinusIndex)
          }
        }
        if (decimalScale) {
          const pointIndex = value.indexOf('.')
          const length = value.length
          if (pointIndex > -1 && pointIndex + decimalScale + 1 < length) {
            value = value.substring(0 , pointIndex + decimalScale + 1)          // 移除小数点后超出位数的所有数字
          }
          const pointArr = value.split('.')
          if (pointArr.length > 2) {
            const lastPointIndex = value.lastIndexOf('.')
            value = value.slice(0, lastPointIndex)                // 移除第一个小数点之外的所有句点
          }
        } else {
          value = value.replace('.', '')
        }
        setInputValue(value)
      })
    }
  1. 小程序不支持set-Cookie设置cookie,所以需要手动取出来,设置进缓存,当有多个cookie时,更要注意数据的拼接,因为小程序没有返回一个正确的格式
const cookie = responseHeader['Set-Cookie']
      // 解析多个set-Cookie拼接
      const cookieObj = {
        __session_id: '',
        __device_id: ''
      }
      cookie?.split(';')?.forEach((item) => {
        const sessionIndex = item.indexOf('__session_id')
        if (sessionIndex > -1) cookieObj.__session_id = item.substring(sessionIndex + 12)
        const deviceIndex = item.indexOf('__device_id')
        if (deviceIndex > -1) cookieObj.__device_id = item.substring(deviceIndex + 11)
      })
      let reqCookie = ''
      for(const key in cookieObj) {
        if (cookieObj[key]) reqCookie += key + cookieObj[key] + ';'
      }
      reqCookie && Taro.setStorageSync('cookie', reqCookie)

  1. text设置user-select='true'后,-webkit-line-clamp: 3失效
    因为 设置user-select后会将该段文字的css改为inline-block。并且不能改为-webkit-box。导致失效。 如果要长按复制,文字不能设置几行省略号,智能动态计算文字长度,手动添加...