带有验证的ReactJS TextInput组件-OnChange不工作

带有验证的ReactJS TextInput组件-OnChange不工作,reactjs,ecmascript-6,textinput,Reactjs,Ecmascript 6,Textinput,我已经创建了一个TextInput组件,它既可以作为textbox,也可以作为textarea,还可以进行验证 当我使用handleChange事件创建一个TextInput标记时,它不会触发 <TextInput ref="c1" className="form-control" type="textarea" rows={4}

我已经创建了一个TextInput组件,它既可以作为textbox,也可以作为textarea,还可以进行验证 当我使用handleChange事件创建一个TextInput标记时,它不会触发

<TextInput
                  ref="c1"
                  className="form-control"
                  type="textarea"
                  rows={4}
                  required
                  errorMessage="c1is invalid"
                  emptyMessage="c1is required"
                  handleChange={this.handleSuggestedReplyChange}
                  value={this.state.answeredBy || ''}
                />

handleSuggestedReplyChange是一个写在模板页面中的事件

从“React”导入React;
从“/ValidationComponent”导入composeValidationComponent;
类TextInput扩展了React.Component{
构造函数(道具、上下文){
超级(道具、背景);
this.displayName='TextInput';
}
render(){
如果(this.props.type=='textarea'){
返回(
);
}
返回(
);
}
}
TextInput.propTypes={
类型:React.PropTypes.string,
占位符:React.PropTypes.string,
类名:React.PropTypes.string,
值:React.PropTypes.string,
行:React.PropTypes.number,
只读:React.PropTypes.bool,
handleChange:React.PropTypes.func,
};

导出默认composeValidationComponent(TextInput,'TextInput')我想我看到了这个问题。我假设您希望调用
this.handleSuggestedReplyChange
,但事实并非如此

这是因为验证类包装器。在render方法中,将所有道具和状态传递给组件,然后指定自定义handleChange。您提供的道具将覆盖通过this.props传入的道具

要解决这个问题,我建议您在ValidationComponent的handleChange中调用
this.props.handleChange()

handleChange(事件){
//设置状态以使其显示在窗体上
这是我的国家({
值:event.target.value
});
如果(此.道具.把手更改){
this.props.handleChange(event.target.value);
}

}
我想我看到了这个问题。我假设您希望调用
this.handleSuggestedReplyChange
,但事实并非如此

这是因为验证类包装器。在render方法中,将所有道具和状态传递给组件,然后指定自定义handleChange。您提供的道具将覆盖通过this.props传入的道具

要解决这个问题,我建议您在ValidationComponent的handleChange中调用
this.props.handleChange()

handleChange(事件){
//设置状态以使其显示在窗体上
这是我的国家({
值:event.target.value
});
如果(此.道具.把手更改){
this.props.handleChange(event.target.value);
}

}
我支持这一说法。我不知道为什么要将{this.handleSuggestedReplyChange}传递到handleChange,然后在子组件中重新定义handleChange函数谢谢Rob。罗布,还有一个问题。当我试图使用
this.refs.comments.state.value
获取textarea的值时,它给出了未定义的值。然而,如果我在textarea中更改值,我可以访问该值。如何在不更改任何内容的情况下访问textarea内容?或者是否有方法手动触发handleChange事件?“state”是组件的私有状态;因此comments.state是未定义的。使用从需要数据的位置向下传递的onChange回调将数据提升回该上下文。我不知道为什么要将{this.handleSuggestedReplyChange}传递到handleChange,然后在子组件中重新定义handleChange函数谢谢Rob。罗布,还有一个问题。当我试图使用
this.refs.comments.state.value
获取textarea的值时,它给出了未定义的值。然而,如果我在textarea中更改值,我可以访问该值。如何在不更改任何内容的情况下访问textarea内容?或者是否有方法手动触发handleChange事件?“state”是组件的私有状态;因此comments.state是未定义的。使用从需要数据的位置向下传递的onChange回调将数据提升回该上下文。