在 react-redux 演示组件中使用操作时遇到问题

Trouble using actions in react-redux presentational component

我是 redux 的新手,无法理解展示组件和容器组件。

相关堆栈:

问题:

我有一个登录按钮组件,呈现时会检查登录状态并调用 onSuccessfulLogin 操作,该操作使用用户的 Facebook 凭据更新状态。

但是,当我试图将它分成单独的 presentational/container 组件时,我无法调用 onSuccessfulLogin 操作:Error: onSuccessfulLogin is not defined.

我在这里做错了什么?我想有一些简单的事情我不理解这两个组件与 connect() 函数之间的关系。

演示组件 (Login.js)

import React, { PropTypes } from "react-native";
import FBLogin from "react-native-facebook-login";
import UserActions from "../users/UserActions";

class LoginPage extends React.Component {

    render() {

        const { userData, onSuccessfulLogin } = this.props;

        return (
          <FBLogin
              permissions={["email","user_friends"]}
              onLoginFound= { data => {
                  onSuccessfulLogin(data.credentials);
              }}
              />
        )
    }
};

export default LoginPage;

容器组件(LoginContainer.js)

import { connect } from 'react-redux';
import LoginPage from "../login/LoginPage";
import UserActions from "../users/UserActions";

const mapDispatchToProps = (dispatch) => {
  return {
    onSuccessfulLogin: (userData) => {
      dispatch(UserActions.userLoggedIn(userData))
    }
  }
}

const mapStateToProps = (state) => {
  return {
    userData: state.userData
  }
}

const LoginContainer = connect(
  mapStateToProps,
  mapDispatchToProps
)(LoginPage);

export default LoginContainer;

此外,如果我想让 LoginPage 组件可以访问更新后的 state.userData,我该怎么做?任何帮助表示赞赏!

已解决! 使用 ES6 类 时,需要在构造方法中调用 super(props) 才能访问容器的属性连接的演示组件:

class LoginPage extends React.Component {
    constructor(props){
        super(props);
    }

    render(){    
        // ...
    }
}

您的容器组件应该是一个 组件 并且它必须有一个 render 函数 和 dumb/presentational 组件想要渲染。

import { connect } from 'react-redux';
import LoginPage from "../login/LoginPage";
import UserActions from "../users/UserActions";


class LoginContainer extends React.Component {
    constructor(props){
      super(props);
    }
    render() {
        return (
          <LoginPage userData={this.props.userData}
              onSuccessfulLogin={this.props.onSuccessfulLogin}
              />
        )
    }
};

const mapDispatchToProps = (dispatch) => {
  return {
    onSuccessfulLogin: (userData) => {
      dispatch(UserActions.userLoggedIn(userData))
    }
  }
}

const mapStateToProps = (state) => {
  return {
    userData: state.userData
  }
}


export default connect(
  mapStateToProps,
  mapDispatchToProps
)(LoginPage);