如何在本机反应中实现“ X”清除按钮,以使其在Android和iOS上均可使用。iOS具有“ clearButtonMode”枚举的文本输入选项(“从不”,“正在编辑”,“除非编辑”,“始终”)。
为了使其跨平台,我们是否需要添加清除按钮的android条件渲染?就像是:
{Platform.OS === 'android' &&
似乎有点骇人听闻,所以我想知道是否有一种更清洁的方法。
对于您的问题,您只需创建一个简单的按钮来处理输入字段的清除功能,然后将其放置在TextInput组件旁边即可产生效果clearButtonMode
。
天真的实现可能是这样的:
在您的主要组件构造函数中创建以下状态:
TextInput状态的状态(是否被触摸?它是否有文本?)
一个TextInput实际值的状态,请将TextInput设置value
为此状态。
例如:
this.state = {
textInput1Status: 'untouched',
textInput1Value: '',
};
创建回调函数以设置状态:
创建一个回调函数来设置TextInput的值状态和状态状态,并将其分配给onChange
TextInput 的prop。
例如:
this.onTextInput1Change(text)}
value={this.state.textInput1Value}
/>
...
onTextInput1Change(text) {
this.setState({
textInput1Status: 'touched',
textInput1Value: text
});
}
使用TouchableOpacity创建您自己的按钮并处理清除功能。
例如:
...
clearText() {
this.setState({
textInput1Status: 'untouched',
textInput1Value: '',
});
}
处理“ X”按钮的呈现:
例如:
renderClearButotn() {
if (this.state.textInput1Status == 'touched') {
return (
);
} else {
return '';
}
}
...
render() {
return (
this.onTextInput1Change(text)}
value={this.state.textInput1Value}
/>
{this.renderClearButton()}
);
}
这样,您的代码将独立于iOS和Android。希望对您有所帮助!