作者:中国脐橙在线 | 来源:互联网 | 2022-11-30 12:55
在我的TextInput更改文本中,我检测用户是否按下@
按钮以进行提及.
onChangeText(text){
const suggestTrigger = text.match(/\B@[A-Za-z0-9]*$/i) //grab "@" trigger
const searchQuery = (suggestTrigger && suggestTrigger.length > 0) ? suggestTrigger[0] : null;
this.setState({
searchQuery: searchQuery
})
}
然后,在我的渲染中,我做:
但是,即使我这样做,自动更正也不会关闭.
我仍然看到这个:
这导致了问题,因为系统通常会用完全不同的词替换整个提及.
我怎么能拒绝自动更正和autoCapitalize 关闭,当用户按下@
按钮?"我甚至试过渲染完全不同的东西,但行为仍然存在.
1> 小智..:
TL; DR:您应该在TextInput
autoCorrect
切换值后关闭并重新启动键盘.
巴迪,这是不是你的错,我有同样的问题上autoFocus
的react native
TextInput
分量.我state
为TextInput
editable
道具设置了名称,然后按下pencil
按钮我改变editable
道具.设计师告诉我,在TextInput
编辑后,光标应该被聚焦,所以我使用isEditable
状态作为autoFocus
道具,见下文:
state = {
isEditable: false
};
handleEdit = () => {
const { isEditable } = this.state;
this.setState({ isEditable: !isEditable });
};
然后我按下编辑按钮,它转到:
但它并没有集中精力且键盘没有启动,我寻找并发现了这个链接,之后TextInput
没有改变/更新它的一些道具componentDidMount
.☹️.另外,它没有区别,iOS
或者Android
两者都有这个问题,我以后在国家制定之后就把ref
重点放在了这个问题上.看下面的代码:TextInput
isEditable
true
{
this.input = input;
}}
/>
componentDidUpdate() {
const { isEditable } = this.state;
if (isEditable) {
this.input.focus();
}
}
你的情况:
绝对你不能使用,ref
因为autoCorrect
应该渲染,react native
它不喜欢focus()
,blur()
因此Javascript
无法访问它.
我为你的情况做了一个测试形状,我创建了另一个像星星一样的按钮,用于autoCorrect
在我的编辑按钮旁边切换值.填充星号代表autoCorrect
是true
和线星手段autoCorrect
是false
,现在看到测试区域代码和看法:
state = {
isEditable: false,
correct: true
};
handleCorrect = () => {
const { correct } = this.state;
this.setState({ correct: !correct });
};
{
this.input = input;
}}
/>
在上面的照片中,autoCorrect
渲染为如此清晰true
,因此启用:
当我写一个错误的波斯语单词时,自动更正会显示其建议,现在是按下星号按钮的时间:
哇,这autoCorrection
是false
在上述情况,但我们仍然看到手机的自动更正.就像autoFocus
它在第一个渲染中渲染一样,在它之后,它TextInput
无法更改/更新它的道具.我突然按下编辑按钮:
我再次按下编辑键,那么可以肯定,你意识到autoCorrect
是false
现在,好了,现在看到我所看到的:
在autoCorrect
保持false
我的双按下编辑按钮,现在设备的自动校正完全消失.我不知道这是一个错误或我的理解不好,但我意识到在这个测试区域,为了更新autoCorrect
价值,我们应该在更改其值后关闭iPhone键盘,然后重新启动它.发布的主要内容TextInput
是推出的键盘.
对于我的测试,当我按下编辑按钮时,它的editable
支柱TextInput
变为false并且键盘关闭,所以当我再次按下编辑按钮时,TextInput
聚焦和键盘重新启动时带有新autoCorrect
值.这是秘密.
解:
您应该执行某些操作,使用新autoCorrect
值关闭并再次打开iOS键盘.对于我为你的问题写的测试用例,我决定做一个混合创新的解决方案,使用ref
和回调setState
:
handleCorrect = () => {
const { correct } = this.state;
this.input.blur(); //-- this line close the keyboard
this.setState({ correct: !correct },
() => {
setTimeout(() => this.input.focus(), 50);
//-- above line re-launch keyboard after 50 milliseconds
//-- this 50 milliseconds is for waiting to closing keyborad finish
}
);
};
{
this.input = input;
}}
/>
按下星形按钮后,键盘关闭并重新启动,自动校正完全消失.
注意:显然,我总结了一些其他代码,如解构和编写类或扩展等,以提高人类的可读性.