Реагировать на функцию саги не вызывается - PullRequest
0 голосов
/ 24 мая 2018

Я занимаюсь разработкой реактивного проекта и пытаюсь вызвать функцию redux-saga.он не вызывается (я не получаю никаких ошибок).

//App.JS
....
import configureStore from './src/store/configureStore';
const store = configureStore();
class App extends Component {
  render() {
    return (
      <Provider store={store}>
        <View style={{ flex: 1 }}>
          <StatusBar backgroundColor="#285576" />
          <MyForm />
        </View>
      </Provider>
    );
  }
}
export default App;

вот моя конфигурация саги

import { applyMiddleware, createStore } from 'redux';
import createSagaMiddleware from 'redux-saga';
import reducers from './../reducers';
import rootSaga from './../sagas/rootSaga';

export default function configureStore() {
  const sagaMiddleware = createSagaMiddleware();
  const store = createStore(reducers, applyMiddleware(sagaMiddleware));

  sagaMiddleware.run(rootSaga);
  return store;
}

, и это мой компонент, где у меня есть действие входа в систему вызова

...
<TouchableOpacity 
  style={{ 
    backgroundColor: '#4368b2', 
    borderColor: '#3464c8', 
    borderRadius: 5 
  }}
  onPress={login(this.props.email,this.props.password)}> //call login action
  <Text style={commonStyle.buttonText}>{this.props.type}</Text>
</TouchableOpacity>
    ...

вот файл действий.когда я нажал TouchableOpacity console.log запускает

export function login(email, password) {
  console.log('action-login');
  return {
    type: LOGIN_ACTION,
    username: email,
    password
  };
}

, это мой rootSaga.js

import { all, fork } from 'redux-saga/effects';
import { loginFlow } from './AuthSagas';

export default function* rootSaga() {
  yield fork(loginFlow);
}

, а это AuthSagas.js.пока приложение запускается, console.log функции loginFlow работает * Мой код - 1016 *

import { put, call, take } from 'redux-saga/effects';
import { takeEvery } from 'redux-saga';
import auth from './../auth';
import { LOGIN_ACTION } from './../action/types';
import { setLoginSuccess, setLoginError } from './../action';

function* authorize(credentials) {
  try {
    const token = yield call(auth.login(credentials));
    console.log(token);
    if (!token.error) {
      yield put(setLoginSuccess(token, credentials.username, credentials.password));
      return token;
    }
    yield put(setLoginError(token));
    return undefined;
  } catch (error) {
    console.log(error);
    return undefined;
  }
}

export function* loginFlow() {
  console.log('saga-alert'); 
  const { username, password } = yield take(LOGIN_ACTION);
  yield call(authorize, { username, password });
}

.Мое приложение работает без ошибок.Но сага не называется.при нажатии touchableopacity.

1 Ответ

0 голосов
/ 24 мая 2018

rootSaga.js:

import { all } from 'redux-saga/effects';
import { loginFlow } from './AuthSagas';

export default function* rootSaga() {
  yield all([
    loginFlow(),
  ]);
}
...