1

我创建了一个 React Native 应用程序。我index.ios.js将中间件添加到商店的地方。

import React, { Component } from 'react'
import {
  AppRegistry,
} from 'react-native'
import { Provider } from 'react-redux'
import { applyMiddleware, createStore } from 'redux'
import createLogger from 'redux-logger'
import createSagaMiddleware from 'redux-saga'

import reducer from './src/reducers'
import * as sagas from './src/sagas'
import Scene from './src/components/scene'

const store = createStore(
  reducer,
  applyMiddleware(createSagaMiddleware(...sagas), createLogger())
);

const CitiesApp = () => (
  <Provider store={store}>
    <Scene />
  </Provider>
);

AppRegistry.registerComponent('CitiesApp', () => CitiesApp);

我有一个动作:

export const USER_FETCH_REQUESTED = 'USER_FETCH_REQUESTED';
export const fetchUser = () => ({
  type: USER_FETCH_REQUESTED
});

componentDidMount在一个组件中调用

componentDidMount() {
  this.props.dispatch(fetchUser());
  console.log('componentDidMount')
}

我也有一个传奇:

export function* watchUserFetch() {
  console.log('watchUserFetch');
  yield take(actions.USER_FETCH_REQUESTED);
  yield fork(fetchUser);
}

function* fetchUser() {
  try {
    const user = yield call(() => Api.fetchUser());
    yield put({type: actions.USER_FETCH_SUCCEEDED, user});
  } catch (e) {
    yield put({type: actions.USER_FETCH_FAILED, message: e.message});
  }
}

但传奇行不通。我没有watchUserFetch在控制台中看到并且fetchUser功能没有运行。

我的错误在哪里?为什么fetchUser不跑?

4

1 回答 1

1
  1. 创建根传奇

    export default function* rootSaga() {
        yield [
            watchUserFetch()
        ]
    }
    
  2. 然后运行 ​​rootSaga

    import createSagaMiddleware from 'redux-saga';
    import rootSaga  from './sagas.js';
    
    const sagaMiddle= createSagaMiddleware();
    
    const store = createStore(reducer,
        applyMiddleware(sagaMiddle,createLogger())
    );
    
    sagaMiddle.run(rootSaga);
    

webpackbin 示例

于 2016-09-09T06:04:32.443 回答