我有一个包含onChange
的React组件,但只有当值更改为有效时才调用onChange
。 (它自己的状态允许它改变输入的文本值,但是当它调用export default class MyInputClass extends React.Component {
constructor(props) {
super(props);
this.handleChange = this.handleChange.bind(this);
this.state = { textValue: '' };
// ...
}
// ...
handleChange(e) {
// set the state regardless of value so the input's text changes
this.setState({ textValue: e.target.value});
// determine whether the value is valid, and if so, call onChange()
let myObj = MyParsedObject.parse(e.target.value);
if (myObj !== null && this.props.onChange) {
this.props.onChange(myObj);
}
}
render() {
return <input onChange={this.handleChange} value={this.state.textValue} />;
}
}
// ...
MyInputClass.propTypes = {
onChange: React.PropTypes.func
};
时,它实际上返回了输入的解析值的对象。)
onChange
现在我有一个属性React.PropTypes.func
,它是this.props.onChange
,当触发输入的更改时,我会尝试解析输入的值。如果成功,我会检查null
是否不是onChange(myParsedObject)
,然后致电onChange
。
这样可行,但它没有感觉正确。 onChange
的处理程序应该期望Event参数(或React中的SyntheticEvent),而不是对象。此外,此模式仅允许BUFFER MACRO
MOV AH,0C
MOV AL,0
INT 21H
ENDM
的一个处理程序,而真实事件可以有多个处理程序。
你如何假设设计React Components来发出真实事件?
答案 0 :(得分:1)
如果MyInputClass
被设计为围绕输入的泛型包装器,那么使用事件而不是解析的输入调用this.props.onChange
可能是有意义的,并让父组件决定如何解析它。但是,如果MyInputClass
是特定类型输入的包装器,那么传递解析后的值可能也是有意义的。您可以随时执行这两项操作,并使其成为API的明确部分:
this.props.onChange(e, myObj);
或者使用onChange
作为通用处理程序,使用onWhateverChange
作为解析版本;例如,对于JsonInput
组件,您可以执行
this.props.onChange(e);
this.props.onJsonChange(parsedJson);