【发布时间】:2017-12-17 13:10:18
【问题描述】:
如果文本已更改,我会在我的 TextInput 字段中调用 onChange 操作。它与 redux 一起工作得很好。
但我需要添加更多操作:
onFocuse(如果文本有效负载 === '0',那么我需要将 TextInput 值更改为 '')
onBlur(如果文本有效负载 === '',那么我需要将 TextInput 值更改为 '0')
我不知道。例如 JQuery 决策:
function addEventOnChange(obj){
jQuery('#'+obj).bind('keyup mouseup change',function(e){
change(document.getElementById(obj));
});
jQuery('#'+obj).click(
function(){//focusin
clears(document.getElementById(obj));
});
jQuery('#'+obj).blur(
function(){//focusout
backzero(document.getElementById(obj));
});
function clears(obj) {
if (obj.value == 0) {
obj.value = '';
}
}
function backzero(obj) {
if (obj.value == "") {
obj.value = 0;
}
}
我当前的操作:
export const textInputChanged = (text) => {
return {
type: TEXTINPUT_CHANGED,
payload: text
};
};
当前减速器:
const INITIAL_STATE = {
textinput: '1000'
};
export default (state = INITIAL_STATE, action) => {
switch (action.type) {
case TEXTINPUT_CHANGED:
return { ...state, textinput: action.payload };
default:
return state;
}
};
当前应用:
onTextInputChange(text) {
this.props.TextInputChanged(number(text));
}
render() {
const number = (text) => { // only for numbers input
if (text.match(',') !== null) {
text = text.replace(',', '.');
}
if (text.match(/[*.*][0-9]*[*.*]/) !== null) {
if (text.match(/\.$/)) {
text = text.replace(/\.$/, '');
} else {
text = text.replace(/[.]/, '');
}
}
return text.replace(/[^\d.]/g, '');
};
return (
<Card>
<TextInput
value={this.props.texinput}
onChangeText={this.onTextInputChange.bind(this)}
onFocus={ clears }
onBlur={ backzero }
/>
</Card>
const mapStateToProps = (state) => {
return {
textinput: state.form.textinput,
};
};
export default connect(mapStateToProps, {
TextInputChanged
})(App);
Decision 听起来像 componentDidMount(),但我感觉不太好
【问题讨论】:
-
您的问题有点不清楚,您是在问,当用户单击您的 textInput 时,您希望它是一个空字符串吗?当他们离开文本区域时,您希望显示一个零吗?
-
仅当 textInput 值 === '0'
-
如果onFocuse我想把字体改成粗体,如果onBlur去掉粗体
-
我相信这就是你要找的……stackoverflow.com/questions/34087459/…
标签: javascript react-native redux