将 Redux 操作传递给嵌套的子组件
Passing Redux action to nested child components
我有以下结构
UserPage -> Container
|-----UserList -> Dumb Component
|--- User ->Dumb Component
我的 action 和 dispatch 显然连接到 UserPage 容器
function mapStateToProps(state) {
return {
users: state.users
};
}
function matchDispatchToProps(dispatch) {
return bindActionCreators({deleteUser: deleteUser}, dispatch);
}
export default connect(mapStateToProps, matchDispatchToProps)(UserPage);
现在我将 deleteUser 操作传递给 UserList 组件
然后从 UserList 到 User as
class UserList extends React.Component {
userList() {
return this.props.users.map(function(user, i){
return(
<User key={i} user={user} deleteUser={this.props.deleteUser} />
);
});
}
}
最后我的叶子组件 User 有这个代码
class User extends React.Component {
render() {
console.info(this.props.deleteUser);
var user = this.props.user
return(
<tr>
<td>{user.id}</td>
<td>{user.name}</td>
<td>{user.email}</td>
<td>{user.createdAt}</td>
<td>{user.updatedAt}</td>
<td>
<a href="#" onClick={()=>this.props.deleteUser(user)}> Delete</a>
</td>
</tr>
);
}
}
export default User;
现在,当我将删除用户从 UserList 传递给 User 时,出现此错误
app.bundle.js:29210 Uncaught TypeError: Cannot read property 'props' of undefined
顺便说一句,我尝试通过将 deleteUser 传递为 ()=>delete user 来将其视为函数,但我仍然收到该错误
您的 UserList#userList
方法没有您期望的 this
。使用箭头函数在定义函数的地方保留 this
:
userList() {
return this.props.users.map((user, i) => (
<User key={i} user={user} deleteUser={this.props.deleteUser} />
)
}
userList() {
return this.props.users.map(function(user, i){
return(
<User key={i} user={user} deleteUser={this.props.deleteUser} />
);
});
}
should be
userList() {
return this.props.users.map((user, i) => {
return(
<User key={i} user={user} deleteUser={this.props.deleteUser} />
);
});
}
因为function(user, i){}
有自己的这个。但是使用 (user, i) => {}
previous 这个被保留了下来。在此处了解有关箭头函数的更多信息 https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions
我有以下结构
UserPage -> Container
|-----UserList -> Dumb Component
|--- User ->Dumb Component
我的 action 和 dispatch 显然连接到 UserPage 容器
function mapStateToProps(state) {
return {
users: state.users
};
}
function matchDispatchToProps(dispatch) {
return bindActionCreators({deleteUser: deleteUser}, dispatch);
}
export default connect(mapStateToProps, matchDispatchToProps)(UserPage);
现在我将 deleteUser 操作传递给 UserList 组件 然后从 UserList 到 User as
class UserList extends React.Component {
userList() {
return this.props.users.map(function(user, i){
return(
<User key={i} user={user} deleteUser={this.props.deleteUser} />
);
});
}
}
最后我的叶子组件 User 有这个代码
class User extends React.Component {
render() {
console.info(this.props.deleteUser);
var user = this.props.user
return(
<tr>
<td>{user.id}</td>
<td>{user.name}</td>
<td>{user.email}</td>
<td>{user.createdAt}</td>
<td>{user.updatedAt}</td>
<td>
<a href="#" onClick={()=>this.props.deleteUser(user)}> Delete</a>
</td>
</tr>
);
}
}
export default User;
现在,当我将删除用户从 UserList 传递给 User 时,出现此错误
app.bundle.js:29210 Uncaught TypeError: Cannot read property 'props' of undefined
顺便说一句,我尝试通过将 deleteUser 传递为 ()=>delete user 来将其视为函数,但我仍然收到该错误
您的 UserList#userList
方法没有您期望的 this
。使用箭头函数在定义函数的地方保留 this
:
userList() {
return this.props.users.map((user, i) => (
<User key={i} user={user} deleteUser={this.props.deleteUser} />
)
}
userList() {
return this.props.users.map(function(user, i){
return(
<User key={i} user={user} deleteUser={this.props.deleteUser} />
);
});
}
should be
userList() {
return this.props.users.map((user, i) => {
return(
<User key={i} user={user} deleteUser={this.props.deleteUser} />
);
});
}
因为function(user, i){}
有自己的这个。但是使用 (user, i) => {}
previous 这个被保留了下来。在此处了解有关箭头函数的更多信息 https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions