プレゼンテーションとコンテナコンポーネントの周りに頭を抱えてしまいました。react-reduxプレゼンテーションコンポーネントのアクションを使用する際に問題が発生する
関連するスタック:
- が反応v0.14.8
- 反応ネイティブv0.24.1
- Reduxののv3.5.2
- 反応-Reduxのv4.4.5
問題:
私は、レンダリング時にログインステータスをチェックし、ユーザーのFacebook資格情報で状態を更新するonSuccessfulLogin
アクションを呼び出すログインボタンコンポーネントを持っています。
ただし、これを独立したプレゼンテーション/コンテナコンポーネントに分割しようとすると、onSuccessfulLoginアクション:Error: onSuccessfulLogin is not defined
を呼び出すことができません。
私はここで間違っていますか?私は、2つのコンポーネントと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(){
// ...
}
}
Reduxのドキュメント(http://redux.js.org/docs/basics/ExampleTodoList.html)に、彼らはコンテナ( 'コンテナ/ VisibleTodoList.js'を持っているので、私は、しかし少し混乱しています)何も描画しません。違いは何ですか? – Andrew
hm ...これは、本当の例のチェックのために、一般的ではない状態とアクションを注入するためだけにコンテナを使用する基本的な例です。https://github.com/reactjs/redux/tree/master/ examples/real-world – QoP
こんにちはQoP、あなたの返信ありがとう:)私の例のコードは、単に状態とアクションを注入するために働くのはなぜですか? – Andrew