Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript MapStateTrops何时出现在组件生命周期中_Javascript_Reactjs_Redux - Fatal编程技术网

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>