Javascript MapStateTrops何时出现在组件生命周期中
我有一个表中的项目列表。我希望能够单击任何项目上的Javascript MapStateTrops何时出现在组件生命周期中,javascript,reactjs,redux,Javascript,Reactjs,Redux,我有一个表中的项目列表。我希望能够单击任何项目上的详细信息链接,并转到一个新页面,在那里我可以看到该项目的详细信息。下面是我的代码 从“React”导入React; 从'react redux'导入{connect}; 从“toastr”导入toastr; 从“反应路由器”导入{Link}; 从“redux”导入{bindActionCreators}; 从“../../actions/documentActions”导入*作为documentActions; 类DocumentDetails
详细信息
链接,并转到一个新页面,在那里我可以看到该项目的详细信息。下面是我的代码
从“React”导入React;
从'react redux'导入{connect};
从“toastr”导入toastr;
从“反应路由器”导入{Link};
从“redux”导入{bindActionCreators};
从“../../actions/documentActions”导入*作为documentActions;
类DocumentDetailsPage扩展了React.Component{
建造师(道具){
超级(道具);
this.deleteDoc=this.deleteDoc.bind(this);
}
删除文档(id){
this.props.actions.deleteDocument(id)
。然后(res=>toastr.success('documentdeleted successfully!'));
}
render(){
const{document}=this.props;
返回(
{document.title}
访问类型:
{(document.access).toUpperCase()}
出版日期:
{(document.createdAt)?
document.createdAt.split('T')[0]:''}
作者:
{document.owner.firstName}{document.owner.lastName}
返回
{this.props.auth.user.userId==document.ownerId&&
编辑
删除
}
);
}
}
DocumentDetailsPage.propTypes={
文档:React.PropTypes.object.isRequired,
操作:React.PropTypes.object.isRequired,
auth:React.PropTypes.object.isRequired,
};
函数getDocumentById(文档,id){
const document=documents.filter(item=>item.id==id);
如果(单据)返回单据[0];
返回null;
}
函数mapStateToProps(状态,ownProps){
const documentId=ownProps.params.id;//来自路径`/document/:id`
出租文件;
if(documentId&&state.documents.length>0){
document=getDocumentById(state.documents,parseInt(documentId,10));
}
返回{
文件,
auth:state.auth,
};
}
功能图DispatchToprops(调度){
返回{
操作:bindActionCreators(文档操作、调度),
};
}
导出默认连接(mapStateToProps、mapDispatchToProps)(DocumentDetailsPage)代码>这里有两个问题:
1) 您的deleteDoc
类方法需要一个id
参数,该参数将传递给操作创建者。因为您已经将完整文档作为道具,所以从对象获取它,而不是接收它:
deleteDoc() {
const { actions, document } = this.props
actions.deleteDocument(document.id)
.then(res => toastr.success('Document deleted successfully!'));
}
2) 您正在调用onClick
处理程序中的deleteDoc
函数
// Wrong
<Link to="/" onClick={this.deleteDoc()}> Delete </Link>
据我所见,您将documentId作为普通道具传递给组件,但文档是从存储中传递进来的。mapStateToProps仅在redux存储更新时被调用,并且在道具更新时可能不会被调用(我不清楚是否会发生这种情况)。不管怎样,您希望在redux存储中拥有组合数据,或者以其他方式启动redux存储以再次触发MapStateTops似乎是有意义的。阅读代码只是一个猜测。
// Right
<Link to="/" onClick={this.deleteDoc}> Delete </Link>