Reactjs 在componentDidMount中调度redux操作导致无限循环
你好,我是新来的。我有一些代码看起来像这样Reactjs 在componentDidMount中调度redux操作导致无限循环,reactjs,redux,react-redux,axios,Reactjs,Redux,React Redux,Axios,你好,我是新来的。我有一些代码看起来像这样 import React, { Component } from 'react'; import axios from 'axios' import { connect } from 'react-redux' import {setFullView,setRecords} from '../actions/ActivityActions' class BrowseAccount extends Component { constructor
import React, { Component } from 'react';
import axios from 'axios'
import { connect } from 'react-redux'
import {setFullView,setRecords} from '../actions/ActivityActions'
class BrowseAccount extends Component {
constructor(props){
super(props)
this.state = {
records:[]
}
this.handleClickRow = this.handleClickRow.bind(this)
}
componentDidMount(){
console.log("infiniteloop")
axios.post("http://localhost:8282/api/account/options", {
search : "",
limit : 10
})
.then(response => {
var arr = response.data.records
var result = arr.map( record => ({name : record.name,id: record.id}))
this.props.setRecords(result)
})
}
compoenentWillUnmount(){
console.log(this.state.records)
}
handleClickRow(){
this.props.setFullView("ViewAccount")
}
render() {
return (
<div>
<table border="1">
<tr><td>No.</td><td>ID</td><td>Name</td></tr>
{this.props.Activity.records.map((record,i)=><tr><td>{i+1}.</td><td>{record.id}</td><td><a onClick={()=>this.handleClickRow({i})}>{record.name}</a></td></tr>)}
</table>
</div>
)
}
}
const mapStateToProps = (state) => {
return {
SelectReducer :state.SelectReducer,
BoxReducer :state.BoxReducer,
Global :state.GlobalReducer,
Activity :state.ActivityReducer
}
}
const mapDispatchToProps = (dispatch) => {
return {
setFullView : (path) => {
dispatch(setFullView(path))
},
setRecords : (data) => {
dispatch(setRecords(data))
}
}
}
export default connect(mapStateToProps,mapDispatchToProps)(BrowseAccount)
import React,{Component}来自'React';
从“axios”导入axios
从“react redux”导入{connect}
从“../actions/ActivityActions”导入{setFullView,setRecords}
类BrowseAccount扩展组件{
建造师(道具){
超级(道具)
此.state={
记录:[]
}
this.handleClickRow=this.handleClickRow.bind(this)
}
componentDidMount(){
console.log(“InfiniteLop”)
axios.post(“http://localhost:8282/api/account/options", {
搜索:“,
限额:10
})
。然后(响应=>{
var arr=response.data.records
var result=arr.map(记录=>({name:record.name,id:record.id}))
this.props.setRecords(结果)
})
}
componentwillunmount(){
console.log(this.state.records)
}
handleClickRow(){
this.props.setFullView(“ViewAccount”)
}
render(){
返回(
编号IDName
{this.props.Activity.records.map((record,i)=>{i+1}.{record.id}this.handleClickRow({i})}>{record.name}
)
}
}
常量mapStateToProps=(状态)=>{
返回{
SelectReducer:state.SelectReducer,
BoxReducer:state.BoxReducer,
全局:state.GlobalReducer,
活动:state.ActivityReducer
}
}
const mapDispatchToProps=(调度)=>{
返回{
setFullView:(路径)=>{
调度(setFullView(路径))
},
setRecords:(数据)=>{
调度(设置记录(数据))
}
}
}
导出默认连接(mapStateToProps、mapDispatchToProps)(BrowseAccount)
axios post请求在无限循环中运行
表行中的onClick无效
但是当我使用这个.setState()而不是使用redux时,它并不会导致无限循环
console.log in component willunmount不显示任何内容
有没有办法让请求正常工作,我仍然可以使用redux存储请求数据?(但不是在无限循环中)使用
setState
重新渲染组件。但我认为,setRecords
会使组件重新安装。让我们将console
放入componentWillUnmount
中,检查它是否卸载并重新装载。@TamDc请求仍在无限循环中运行,但console.log(this.props.Activity.records)在我将其放入ComponentWillmount后,没有显示任何内容,并且我无法单击此component中的渲染元素。您需要显示更多的组件结构。ie如何将此组件连接到redux和/或也已连接的父组件@TamDc对父级渲染以某种方式导致的重新装载是正确的。我使用react lazy在父级组件中动态加载组件