如何从子组件调用父组件中的方法
How to call methods in Parent component from Child component?
我有一个元素,一个名为<NormalTextField/>
的子组件,但如何从其父组件<Home/>
调用方法_handleFirstName
和_handleLastName
?我正试图让用户输入一个文本,它将被发送到Reducer中创建一个包含firstName
和lastName
的对象user
。
在<Home/>
中,我有以下内容:
_handleFirstName(event){
this.props.actions.updateFirstName(event.target.value)
}
_handleLastName(event){
this.props.actions.updateLastName(event.target.value)
}
render(){
return(
<NormalTextField
hint='Enter First Name'
onChange={this._handleFirstName.bind(this)}
value={this.props.user.firstName}
/>
<NormalTextField
hint='Enter Last Name'
onChange={this._handleLastName.bind(this)}
value={this.props.user.lastName}
/>
然后在我的元素<NormalTextField/>
中,
import React, { Component } from 'react'
import { TextField } from 'material-ui'
import { orange900 } from 'material-ui/styles/colors'
class TextFieldLabel extends Component {
static propTypes = {
hint: React.PropTypes.string,
onChange: React.PropTypes.func
}
_handle(event){
this.props.onChange(event.target.value)
}
render() {
var pr = this.props
var hint = pr.hint
var value = pr.value
return (
<TextField
hintText={hint}
onChange={this._handle.bind(this)}
value={value}
/>
)
}
}
export default NormalTextField
但是,一旦用户输入文本,我就会得到以下错误:Uncaught: TypeError: Cannot read property 'value' of undefined
代表_handleFirstName(event)
。我做错了什么?这是正确的方法吗?Child组件是否可以调用Parent的方法?
您看到的问题是,当event.target.value
接受event
时,您正在将其传递给_handleFirstName
。您可以将句柄更改为:(_H)
_handle(event) {
this.props.onChange(event)
}
或者,理想情况下,您可以删除NormalTextField
中的事件处理程序,然后直接使用onChange道具。
从将绑定调用移动到构造函数开始:
constructor() {
super();
this._handleFirstName = this._handleFirstName.bind(this);
this._handleLastName= this._handleLastName.bind(this);
}
_handleFirstName(event){
this.props.actions.updateFirstName(event.target.value)
}
_handleLastName(event){
this.props.actions.updateLastName(event.target.value)
}
// remove .bind(this) from your onChange
render(){
return(
<NormalTextField
hint='Enter First Name'
onChange={this._handleFirstName}
value={this.props.user.firstName}
/>
<NormalTextField
hint='Enter Last Name'
onChange={this._handleLastName}
value={this.props.user.lastName}
/>
将您的NormalTextField更改为:
class TextFieldLabel extends Component {
static propTypes = {
hint: React.PropTypes.string,
onChange: React.PropTypes.func
}
// _handle removed
render() {
var pr = this.props
var hint = pr.hint
var value = pr.value
return (
<TextField
hintText={hint}
onChange={this.props.onChange} // use prop directly
value={value}
/>
)
}
}
相关文章:
- react组件中的绑定方法
- Angular2将组件方法导入到另一个组件中
- 从vuejs中的组件模板访问父方法
- 在React中将方法从一个组件移动到另一个组件,并且仍然可以在原始组件中使用
- 如何从Vue.js中的子组件访问父方法
- Redux-组件不同的方法(智能/哑点/容器/演示)
- 组件之后子元素中的某个方法DidMount in parrent 元素
- bind():您正在将一个组件方法绑定到该组件.React会自动为您执行此操作
- Emberjs-如何在组件方法中获取当前路由器路径
- EmberJS - 使用几个解决方案从外部调用组件方法(呼吁讨论)
- ReactJS以正确的方式绑定组件方法
- 如何从WebSocket回调访问React中的组件方法
- Angular 1.5组件方法templateUrl+函数
- React组件方法this.state.myState从child返回后未定义
- 在React中暴露组件方法
- finddomnode(组件)方法列表
- 用Sinon存根一个React组件方法
- 在ReactJs组件方法调用之间存储变量
- 我只能在使用Angular2 Universal的客户端中运行组件方法吗
- 在 constructor() 中绑定许多 React 组件方法的上下文的正确约定是什么?