请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

为什么在yield put(action)会导致网页无限加载

RT

我最后改成了return put(action)就好了,这是为啥呢?

app.js中componentDidMount:

componentDidMount(){
    store.subscribe(this.handlesubscription.bind(this));

    let mock = new MockAdapter(axios);
    mock.onGet('/todos').reply(200,{
      data:'this is mockup'
    });

    const action = getTodos();
    store.dispatch(action);
  }

  handlesubscription = prevState=>{
    this.setState(store.getState())
  }

actionCreators.js中的action

import { createAction } from '@reduxjs/toolkit';
import {GET_TODOS} from './actionlib'

export const getTodos = createAction(GET_TODOS)

sagas.js代码

import {takeEvery, put} from 'redux-saga/effects'
import {UPDATE_ITEM_INPUT, SUBMIT_ITEM_INPUT, DELETE_ITEM_DATA, GET_TODOS} from './actionlib'
import {getTodos} from './actionCreators'
import axios from 'axios';

function* getTodos_saga(){
  const res = yield axios.get('/todos');
  const action = yield getTodos(res.data.data);
  return put(action);
}

function* mySaga() {
  yield takeEvery(GET_TODOS, getTodos_saga);
}

export default mySaga;

正在回答 回答被采纳积分+3

2回答

Dell 2020-12-04 01:14:10

你这代码明显就是个死循环啊:

function* getTodos_saga(){
 const res = yield axios.get('/todos');
 const action = yield getTodos(res.data.data);
 return put(action);
}

0 回复 有任何疑惑可以回复我~
  • 提问者 慕码人7077953 #1
    噢我明白了,命名要分开
    回复 有任何疑惑可以回复我~ 2020-12-07 14:48:37
  • const action = yield getTodos(res.data.data);  是因为执行这一句 所以成了死循环吗
    回复 有任何疑惑可以回复我~ 2021-05-19 13:54:32
Dell 2020-12-03 00:35:58

代码贴上来看看

0 回复 有任何疑惑可以回复我~
  • 提问者 慕码人7077953 #1
    修改上去了哈,您看下
    回复 有任何疑惑可以回复我~ 2020-12-03 15:47:45
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信