2016-08-04 3 views
1

У меня есть следующие действия создателя (s) и по какой-то причине, то код в отправки не выполняет, хотя я знаю, что loginSuccess() вызывается, потому что первые триггеры предупреждения. Что я делаю не так?Redux Отправка не работает в действии Творца

import facebook from '../api/facebook' 
import * as types from '../constants/ActionTypes'; 

export function loginSuccess() { 
    alert("This alerts fine"); 
    return dispatch => { 
    alert("This doesn't alert"); 
    } 
} 

Я использую стук (или, по крайней мере, думает, что я правильно), как можно увидеть ниже при создании магазина.

import App from './containers/App'; 
import React, { Component } from 'react'; 
import { Provider } from 'react-redux'; 
import configureStore from './store'; 
import createReducer from './reducers'; 
import { createStore, applyMiddleware } from 'redux' 
import Parse from 'parse/react-native'; 
import { AsyncStorage } from 'react-native'; 
import Settings from './settings'; 
import thunk from 'redux-thunk' 
import logger from 'redux-logger' 

const settings = Settings.load(); 

const middleware = [ thunk, logger() ] 

const store = createStore(
    createReducer(), 
    applyMiddleware(...middleware) 
) 

function setup() { 
    class Root extends Component { 
     render() { 
      return (
       <Provider store={store}> 
        <App /> 
       </Provider> 
      ); 
     } 
    } 

    return Root; 
} 

module.exports = setup; 

Компонент, который вызов loginSuccess() показан ниже ...

import { View, Text } from 'react-native'; 
import React, { Component,PropTypes } from 'react'; 
import { loginSuccess,loginError } from '../../../actions/application' 
import { 
LoginButton, 
GraphRequest, 
GraphRequestManager, 
GraphRequestConfig, 
} from 'react-native-fbsdk' 


class FacebookLogin extends Component { 

_onLoginSuccess(result){ 
    loginSuccess(); 
}; 

_onLoginError(error){ 
    loginError(); 
} 

_onLoginCancelled(){ 

} 

render(){ 
    return (
    <View> 
     <LoginButton 
     readPermissions={["email","public_profile","user_friends"]} 
     onLoginFinished={ 
      (error, result) => { 
      if (error) { 
       this._onLoginError(error); 
      } else if (result.isCancelled) { 
       this._onLoginCancelled(); 
      } else { 
       this._onLoginSuccess(result); 
      } 
      } 
     } 
     onLogoutFinished={() => alert("User logged out")}/> 
    </View> 
); 
} 
} 

FacebookLogin.propTypes = { 
    navigator: PropTypes.object.isRequired, 
}; 

export default FacebookLogin; 
+0

Поскольку вы возвращаете функцию от создателя действий, я предполагаю, что вы используете 'перевождь-thunk' промежуточное программное обеспечение для' redux' –

+0

@VarunGupta I я верю, но как я могу проверить, что я его использую? – TheJediCowboy

+0

Вы должны добавлять его при создании магазина в списке посредников, которые вы хотите применить к хранилищу. Проверьте эту страницу http://redux.js.org/docs/api/applyMiddleware.html –

ответ

4

Есть несколько ошибок в FacebookLogin компоненте.

  • Компонент не подключен к redux. Сделайте что-то вроде export default connect()(FacebookLogin). Вам необходимо будет импортировать connect из react-redux
  • Вам необходимо отправить сообщение loginSuccesss, а не напрямую позвонить ему. Итак, вам нужно будет сделать что-то вроде this.props.dispatch(loginSuccess())

HTH

0

Да, вы можете послать функцию при использовании стука промежуточного уровня, но следующая функции должны решить для диспетчеризации действий. Если вы хотите просто вызвать оповещение, у вас нет отправки для отправки.

export function loginSuccess() { 
    alert("This alerts fine"); 
    return dispatch => { 
    type: 'LOGIN_SUCCESS', 
    alertText: 'This doesn't alert' 
    } 
} 

Или

export function loginSuccess() { 
    alert("This alerts fine"); 
    alertAction("This doesn't alert"); 
} 

const alertAction = (text) => (dispatch) => ({ 
    type: 'LOGIN_SUCCESS', 
    alertText: text 
})