redux连续ajax请求,ajax - 调度执行AJAX请求的动作时的无限循环 - ReactJS,Redux,Redux-saga - 堆栈内存溢出...

我正在尝试使用redux-saga和axios加载组件的数据,但我一直在获得无限循环。 这些是相关的组成部分:

App.js

class App extends React.Component {

render() {

return (

  • Meal Plans

} />

} />

} />

)

}

}

function mapStateToProps(state) {

return {

app: state.app,

mealPlan: state.mealPlan,

mealPlans: state.mealPlans,

}

}

function mapDispatchToProps(dispatch) {

return bindActionCreators(actionCreators, dispatch);

}

App = withRouter(connect(mapStateToProps, mapDispatchToProps)(App));

export default App;

MealPlan.js

class MealPlan extends React.Component {

componentDidMount() {

let id = this.props.match.params.id

this.props.fetchMealPlan(id);

}

render() {

return (

Future Meal Plan Page

);

}

}

我是React的新手,我对组件生命周期没有很好的把握,但我相信每次AJAX请求完成时都会调用componentDidMount(),并且在reducer中运行'FETCH_MEAL_PLAN_SUCCESSFUL'。

actionCreators.js

export function fetchMealPlan(id) {

return {

type: 'FETCH_MEAL_PLAN',

id

}

}

export function fetchMealPlanSuccessful(data) {

return {

type: 'FETCH_MEAL_PLAN_SUCCESSFUL',

data

}

}

export function fetchMealPlanFail(message) {

return {

type: 'FETCH_MEAL_PLAN_FAIL',

message

}

}

sagas.js

function* fetchMealPlan(action) {

try {

const mealPlan = yield call(api.get, '/meal_plans/' + action.id);

yield put(fetchMealPlanSuccessful(mealPlan.data));

} catch (e) {

yield put(fetchMealPlanFail(e.message));

}

}

function* watchFetchMealPlan() {

yield takeLatest('FETCH_MEAL_PLAN', fetchMealPlan);

}

mealPlan.js(减速机)

function mealPlan(state = {}, action) {

switch(action.type) {

case 'FETCH_MEAL_PLAN':

return state;

case 'FETCH_MEAL_PLAN_FAIL':

return state;

case 'FETCH_MEAL_PLAN_SUCCESSFUL':

state = Object.assign({}, action.data);

return state;

break;

default:

return state;

}

}

export default mealPlan;

如果我不停止该应用程序,它将继续提出请求。 在这个测试中,它产生了4,200多个请求: App无限循环

我花了几个小时研究如何在更改路径后最好地从我的API中为组件加载数据,到目前为止我还没有成功。 预先感谢您的帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值