【发布时间】:2016-09-11 02:36:03
【问题描述】:
我是 redux 的新手,无法理解展示和容器组件。
相关堆栈:
- 反应 v0.14.8
- react-native v0.24.1
- redux v3.5.2
- react-redux v4.4.5
问题:
我有一个登录按钮组件,它在呈现时会检查登录状态并调用onSuccessfulLogin 操作,该操作使用用户的 Facebook 凭据更新状态。
但是,当尝试将其分成单独的展示/容器组件时,我无法调用 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(){
// ...
}
}
【问题讨论】:
标签: javascript reactjs react-native redux react-redux