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 == '' ));
}
這是網上給的方法,那好,拿過來試試吧!萬事準備齊全,那就幹吧,專案啟動,懷著忐忑的心情試了一下,結果非常不幸,居然不管用!!!這是為什麼???
沒辦法,既然網上的教程不管用,那就自己找找原因:
- 把defaultValue或者value刪除,確定能輸入中文,沒問題
- 新增上defaultValue或者value後不能輸入中文
- 先前是這樣寫的defaultValue={this.state.text},換一下思路,直接把this.state.text替換掉,改成defaultValue={‘測試’},執行專案,輸入框出現‘測試’字樣,然後切換成中文輸入法,打字,咦,居然成功了!!!成功了!!!哇什麼原理???
- 既然直接寫死可以,也就是在使用 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中
有問題歡迎留言,本人看到及時回覆!!!謝謝