reactjs - Redux Dispatch 在 Action Creator 中不起作用

标签 reactjs react-native redux react-redux

我有以下 Action 创建者,由于某种原因,dispatch 中的代码没有执行,尽管我知道 loginSuccess() 得到因为第一个警报触发而被调用。我做错了什么?

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");
  }
}

我正在使用 Thunk(或者至少认为我是正确的),如下面创建商店时所示。

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;

最佳答案

FacebookLogin 组件中存在一些错误。

  • 该组件未连接到 redux。执行类似 export default connect()(FacebookLogin) 的操作。您需要从 react-redux
  • 导入 connect
  • 您需要分派(dispatch) loginSuccesss 操作,而不是直接调用它。因此,您需要执行类似 this.props.dispatch(loginSuccess())
  • 的操作

HTH

关于reactjs - Redux Dispatch 在 Action Creator 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38758366/

相关文章:

javascript - JSON 对象 - 在 React Native 中访问值

react-native - 为 Text 组件添加默认颜色的更好方法?

javascript - 每次使用 React Navigation 显示选项卡栏屏幕时重新加载 AsyncStorage 数据

javascript - 在 ReactJS 中映射数组时,即使数组有元素,浏览器中也不会显示任何内容

reactjs - 使用 TypeScript,JSS 和 React 为某些 css 属性抛出 `type is unassignable`

reactjs - 只有在使用 'IterableIterator<number>' 标志或使用 '--downlevelIteration' 或更高的 '--target' 时,才能迭代类型 'es2015'

javascript - 表达式 "Something"? "Something": "Something else" shorter?

javascript - 如何在 react/redux 中调用 API 并从另一个 child 更新一个 child

javascript - 在 redux-orm 模式实例上使用 reducer 方法

javascript - 在 GatsbyJs 中使用 React 汉堡菜单