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在父级组件中动态加载组件