让React组件按照DOM组件的方式触发更改事件

时间:2015-06-20 19:02:41

标签: javascript events reactjs

我有一个包含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来发出真实事件?

1 个答案:

答案 0 :(得分:1)

如果MyInputClass被设计为围绕输入​​的泛型包装器,那么使用事件而不是解析的输入调用this.props.onChange可能是有意义的,并让父组件决定如何解析它。但是,如果MyInputClass特定类型输入的包装器,那么传递解析后的值可能也是有意义的。您可以随时执行这两项操作,并使其成为API的明确部分:

this.props.onChange(e, myObj);

或者使用onChange作为通用处理程序,使用onWhateverChange作为解析版本;例如,对于JsonInput组件,您可以执行

this.props.onChange(e);
this.props.onJsonChange(parsedJson);