我必须有一个不受控制的文本输入(由于某种原因此处未详细说明)。我试图阻止我的<TextInput>.
这是我的组件,这是它的 Snack 演示 - https://snack.expo.io/@noitsnack/textinput-block-onchange
class UncontrolledInput extends Component {
inputRef = null
render() {
return (
<View>
<TextInput ref={this.refInput} onChange={this.handleChange} />
</View>
)
}
refInput = el => this.inputRef = el
handleChange = e => {
const { nativeEvent:{ text } } = e;
// block i characters
if (text.includes('i')) {
e.preventDefault();
e.stopPropagation();
e.returnValue = false;
return false;
}
}
}
Run Code Online (Sandbox Code Playgroud)
这可能吗?虽然preventDefault和stopPoropagation存在于e他们似乎没有做任何事情。
您只是希望文本在某些情况下不更新?您始终可以将其绑定到状态值并确定状态值是否应更新:
class UncontrolledInput extends Component {
state = {
text: '',
}
render() {
return (
<View>
<TextInput value={this.state.text} onChangeText={this.handleChange} />
</View>
)
}
handleChange = text => {
// only update if no 'i'
if (!text.includes('i')) {
this.setState({ text });
}
}
}
Run Code Online (Sandbox Code Playgroud)