redux没有拿起通过动作调度的对象

时间:2017-03-26 23:49:03

标签: redux dispatch redux-saga

我在sagas.js中创建了一个rootSaga作为

function* fetchStuff(action) {
   try {
      yield put({type: 'INCREMENT'})
      yield call(delay, 1000)
      yield put({type: 'DECREMENT'})

      const highlights = yield call(API.getStuff, action.data.myObject);
   } catch (e) {
      yield put({type: 'FETCH_STUFF_FAILED', message: e});
   }
}

export default function* rootSaga() {
  yield takeEvery('INIT_LOAD', fetchStuff);
}

我在INIT_LOAD之后调用thirdParty.method

class myClass extends Component {
  constructor(props) {
    super(props);
  }

  componentDidMount() {
    this.load();
  }

  load = () => {
    this.init = () => {
      this.myObject = thirdParty.method(event => {
        const action = {
          type: 'INIT_LOAD',
          payload: {
            myObject: this.myObject
          }
        };

        store.dispatch(action);
      });
    };

    this.init();
  };

  render() {
    return (
      <div id="render-here" />
    );
  }

在调度的动作中传递this.myObject不会触发传奇。如果我将动作有效负载更改为字符串,如下所示,则会触发传奇。

const action = {
  type: 'INIT_LOAD',
  payload: {
    myObject: 'this.myObject'
  }
};

为什么我无法传递this.myObject但是字符串没问题?

更新:这不是一个传奇问题。我用简单的redux复制了同样的问题。 rootReducer

export default function rootReducer(state = initialState, action) {
  switch (action.type) {
    case 'INIT_LOAD':
      return Object.assign({}, state, { myObject: action.payload.myObject });
    default:
      return state;
  }
}

正如我在下面的评论中提到的,将其分配给对象Obj不会改变问题

let Obj = {};
...
load = () => {
  this.init = () => {
    Obj.myObject = thirdParty.method(event => {
      const action = {
        type: 'INIT_LOAD',
        payload: {
          myObj: Obj
        }
      };

      store.dispatch(action);
    });
  };

  this.init();
};

UPDATE2 我清理了代码&amp;只需在触发传奇的组件中调度一个动作。传奇内部是我init()的所在地。我遇到了另一个问题,我试图在redux存储中保存的对象具有活动的套接字会话(给了我cross-domain个问题)。虽然我没有解决原来的问题,但是没有存储套接字对象会让我的问题消失。

0 个答案:

没有答案