1. 程式人生 > >react-native ios中部分版本不能輸入中文的解決辦法---------------------小白的天堂

react-native ios中部分版本不能輸入中文的解決辦法---------------------小白的天堂

在同一個專案中好多用到了 TextInput 元件,但是都沒有問題,突然有一天給一個TextInput加上了defaultValue屬性後中文居然無法輸入了!!!,撤銷回去又可以輸入了,然後試了一下value屬性也是不行,同樣無法輸入,這是怎麼回事???

於是baidu了一下問題所在,按照網上的教程配置了一下:

shouldComponentUpdate (nextProps){

        return Platform.OS !== 'ios'

            || (this.props.value === nextProps.value && (nextProps.defaultValue == undefined || nextProps.defaultValue == '' ))

            || (this.props.defaultValue === nextProps.defaultValue && (nextProps.value == undefined || nextProps.value == '' ));

}

這是網上給的方法,那好,拿過來試試吧!萬事準備齊全,那就幹吧,專案啟動,懷著忐忑的心情試了一下,結果非常不幸,居然不管用!!!這是為什麼???

沒辦法,既然網上的教程不管用,那就自己找找原因:

  1. 把defaultValue或者value刪除,確定能輸入中文,沒問題
  2. 新增上defaultValue或者value後不能輸入中文
  3. 先前是這樣寫的defaultValue={this.state.text},換一下思路,直接把this.state.text替換掉,改成defaultValue={‘測試’},執行專案,輸入框出現‘測試’字樣,然後切換成中文輸入法,打字,咦,居然成功了!!!成功了!!!哇什麼原理???
  4. 既然直接寫死可以,也就是在使用 this.state.text的時候不行(什麼原理暫時還沒研究),那就好辦了

直接上解決辦法:

定義全域性變數 this.text =‘’;修改defaultValue={this.text},然後在需要給輸入框賦值的函式中使用this.text=‘你要賦值的內容’;

這樣還不行,因為這樣沒有render 所以頁面不會重新整理,this.text的值也不會出現在頁面上,只需要在this.text=‘你要賦值的內容’下邊加上this.setState={xxxx:xxxx},就可以了

做完一切測試一下,完全可以了。在此記錄一下,也分享給有此問題的朋友

在使用網上的那種方法可行的基礎上測試了一下,這種方法也是可以的。

有問題歡迎留言,本人看到及時回覆!!!謝謝

注:

shouldComponentUpdate (nextProps){

        return Platform.OS !== 'ios'

            || (this.props.value === nextProps.value && (nextProps.defaultValue == undefined || nextProps.defaultValue == '' ))

            || (this.props.defaultValue === nextProps.defaultValue && (nextProps.value == undefined || nextProps.value == '' ));

}

換成下邊這種操作就可以使用了:

shouldComponentUpdate(nextProps, nextState) {
        if (Platform.OS === 'ios') {
            if (this.state.text!== nextState.text) {      //text為所要獲得的TextInput輸入值,
                return false;
            }
        }
        return true;
 };

不過這時候也有個小問題:附圖:

歷史記錄的這種情況,點選歷史記錄中的選項時,需要點選兩次,才能輸入到TextInput中

有問題歡迎留言,本人看到及時回覆!!!謝謝