reactjsとreluxeで子からコンテナコンポーネントの状態を設定するにはどうすればよいですか?

Bazinga777

ユーザーがログインボタンをクリックすると、ユーザープロファイルナビゲーションがボタンを置き換えるなど、状態が変化するたびに内部コンポーネントを変更することになっているヘッダーがあります。

私のボタンはナビゲーションコンポーネントの一部であり、このナビゲーションコンポーネントからコンテナコンポーネントの状態を更新する方法がわかりません。

これが私の店の現在の様子です

 var React = require('react');
var Reflux = require('reflux');
var LoginActions  = require('../actions/loginbutton.js');

var LoginStore = Reflux.createStore({

    listenables: LoginActions,

    getInitialState: function() {

        return {
                    loggedin : false,
                    links: [{
                                "name": "Link1",
                                "url": "http://www.google.com"
                             },
                                {
                                    "name": "Link2",
                                    "url": "http://www.google.com"

                             },
                            {
                                "name": "Link3",
                                "url": "http://www.google.com"
                             }]

              };


    },

    onLogin: function() {

      /*How do i replace the state for the header*/

      Header.replaceState({
            loggedin: true,
            data: {
                    "userName": "John Doe",
                    "profile": "http://www.google.com",
                    "img": "https://secure.gravatar.com/avatar/87f33484c35375ea9c8fddd2f7e91ee5?d=https://d3rpyts3de3lx8.cloudfront.net/hackerrank/assets/gravatar.jpg&s=200",
                    "email": "[email protected]",
                    "links": [{
                            "name": "Settings",
                            "url": "/settings"
                    },
                        {
                            "name": "Profile",
                            "url": "/dashboard"
                    },
                        {
                            "name": "Account",
                            "url": "/Account"
                    },
                        {
                            "name": "Logout",
                            "url": "/logout"
                    }]
            }

      });

      console.log(this.state);

    }

});


module.exports = LoginStore;

そしてこれが私のヘッダーコンポーネントです

    var React = require('react');
var Navigation = require('./navmenu.js');
var UserNav = require('./usermenu.js');
var ReactAddons = require('react/addons');
var Reflux = require('reflux');
var LoginStore = require('../stores/loginstore.js');
var LoginActions = require('../actions/loginbutton.js');

var LoggedOut = React.createClass({

    props: {

        navs: React.PropTypes.array
    },

    render: function() {

          return(
                <div>
                      <div className = "nav navbar-nav navbar-right" >
                            <button onClick={LoginActions.Login} className = "login btn btn-primary" > <i className = "fa fa-facebook" > </i> Log In</button >
                      </div>
                      <div className = "collapse navbar-collapse left-bar" >
                            <Navigation classNames = "notloggedin nav navbar-nav" navs = {this.props.navs} />
                       </div>
                 </div>

            );

    }

});


var LoggedIn = React.createClass({

    props: {
        navs: React.PropTypes.array,
        userName: React.PropTypes.string
    },

    render: function() {

        return(
            <div className = "nav navbar-nav navbar-right" >
                  <UserNav navs = {this.props.links}  userName={this.props.userName} />
            </div>
        );
    }
});



var Header = React.createClass({

    mixins: [Reflux.connect(LoginStore, 'data')],

    render: function () {

        var LoggedInState = this.state.data.loggedin;

        if(LoggedInState === 'false' || LoggedInState === false ) {

            LogInArea = <LoggedOut navs={this.state.data.links} />

        }else {

            LogInArea = <LoggedIn navs={this.state.data.data.links} userName={this.state.data.data.userName}/>
        }

        return (

                <div id = { this.props.headerId } >
                    <div className = "navbar navbar-default navbar-fixed-top" >
                        <div className = "container" >
                            <div className = "navbar-header" >
                                    <button type = "button" className = "navbar-toggle collapsed" data-toggle = "collapse" >
                                        <span className = "sr-only"> Toggle navigation < /span >
                                             <span className = "icon-bar" > < /span >
                                             <span className = "icon-bar" > < /span >
                                             <span className = "icon-bar" > < /span >
                                    </button >
                                    <a href = "#" >
                                            <img src="https://www.hackerrank.com/assets/brand/h_mark_sm.png" />
                                     </a>
                              </div>
                              { LogInArea }
                         </div>
                    </div>
                </div>
        );

    }

});


module.exports = Header;

日付の初期状態を設定するときに初期ヘッダーをレンダリングするのに問題はありませんが、LoggedOutコンポーネント内からその状態をターゲットにして、ストア内の状態を設定するにはどうすればよいですか?

ヨハネス・ルンペ

ストアの状態を変更するにはコンポーネントなしでfromをaction使用Reflux.createActionsて以前に作成しディスパッチする必要がありますLoggedOut

アクションが呼び出されたとしましょう。次のlogoutように作成します。

var logout = Reflux.createAction();

あなたの店がそれに反応するためには、あなたは行動に耳を傾ける必要があります:

var statusStore = Reflux.createStore({
  init: function() {
    this.listenTo(logout, this.handleLogout);
  },

  handleLogout: function () {
    // set whatever state you want here
  }
});

これで、コンポーネント内で行う必要があるのは、logout関数を呼び出すことだけです。小道具として渡すか、同形のアプリケーションがない場合はグローバルストレージを使用できます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

子コンポーネントと親コンポーネントの状態を正しく設定するにはどうすればよいですか?

分類Dev

子コンポーネントに状態を設定するにはどうすればよいですか?

分類Dev

親コンポーネントからEmberコンポーネントの内部状態を設定するにはどうすればよいですか?

分類Dev

親コンポーネントの状態を子コンポーネントから変更するにはどうすればよいですか?

分類Dev

ペイロードを渡すコンポーネントからReduxで状態を設定するにはどうすればよいですか?

分類Dev

親の状態を子コンポーネントに渡すにはどうすればよいですか?

分類Dev

子コンポーネントの状態を親に渡すにはどうすればよいですか?

分類Dev

親コンポーネントで子コンポーネントの状態を使用するにはどうすればよいですか?

分類Dev

ビデオエンドのコンポーネントの状態をreactで設定するにはどうすればよいですか?

分類Dev

コンポーネントの状態を別のコンポーネントから変更するにはどうすればよいですか?

分類Dev

引数に基づいてグリマーコンポーネントの初期状態を設定するにはどうすればよいですか?

分類Dev

Reactjsコンポーネントの状態オブジェクトから属性を削除するにはどうすればよいですか?

分類Dev

あるコンポーネントから別のコンポーネントに状態を渡すにはどうすればよいですか?また、状態を変更するにはどうすればよいですか?

分類Dev

状態が変化した後、Reactが再レンダリングされないのですが、子コンポーネントの状態を設定するにはどうすればよいですか?

分類Dev

子コンポーネントが親コンポーネントを介してフィルタリングされるときに子コンポーネントの状態を維持するにはどうすればよいですか?

分類Dev

ReactJSの親コンポーネントにイベントリスナーを設定するにはどうすればよいですか?

分類Dev

Reactコンポーネントの状態を更新するにはどうすればよいですか?

分類Dev

反応:子コンポーネント(クラスコンポーネントではなく関数コンポーネント)の状態を親から変更するにはどうすればよいですか?

分類Dev

React Material UIのAppBarコンポーネント内でコンテナーを設定するにはどうすればよいですか?

分類Dev

Swing:コンポーネントの高さをコンテナの高さに設定するにはどうすればよいですか?

分類Dev

Switchコンポーネントを別個の列としてTableコンポーネントに統合し、両方に別個の状態を設定するにはどうすればよいですか?

分類Dev

コンポーネントの外部でコンポーネントの状態を変更するにはどうすればよいですか?

分類Dev

RN 0.61で状態が変化したときに、メインコンポーネントから子コンポーネントを再レンダリングするにはどうすればよいですか?

分類Dev

reactjsで1つのコンポーネント(子コンポーネント)から別のコンポーネント(親コンポーネント)に値を取得するにはどうすればよいですか?

分類Dev

vue jsのログインコンポーネントからユーザーの状態を更新するにはどうすればよいですか?

分類Dev

子コンポーネント内で使用する親の状態を渡すにはどうすればよいですか?

分類Dev

ダイナミックパネルをコンポーネントの親として設定するにはどうすればよいですか?

分類Dev

小道具として渡されたときに、状態を親コンポーネントから子コンポーネントに更新するにはどうすればよいですか?

分類Dev

Reactで一度に1つのコンポーネントのアクティブ状態を設定し、他のすべてのコンポーネントのアクティブ状態を削除するにはどうすればよいですか?

Related 関連記事

  1. 1

    子コンポーネントと親コンポーネントの状態を正しく設定するにはどうすればよいですか?

  2. 2

    子コンポーネントに状態を設定するにはどうすればよいですか?

  3. 3

    親コンポーネントからEmberコンポーネントの内部状態を設定するにはどうすればよいですか?

  4. 4

    親コンポーネントの状態を子コンポーネントから変更するにはどうすればよいですか?

  5. 5

    ペイロードを渡すコンポーネントからReduxで状態を設定するにはどうすればよいですか?

  6. 6

    親の状態を子コンポーネントに渡すにはどうすればよいですか?

  7. 7

    子コンポーネントの状態を親に渡すにはどうすればよいですか?

  8. 8

    親コンポーネントで子コンポーネントの状態を使用するにはどうすればよいですか?

  9. 9

    ビデオエンドのコンポーネントの状態をreactで設定するにはどうすればよいですか?

  10. 10

    コンポーネントの状態を別のコンポーネントから変更するにはどうすればよいですか?

  11. 11

    引数に基づいてグリマーコンポーネントの初期状態を設定するにはどうすればよいですか?

  12. 12

    Reactjsコンポーネントの状態オブジェクトから属性を削除するにはどうすればよいですか?

  13. 13

    あるコンポーネントから別のコンポーネントに状態を渡すにはどうすればよいですか?また、状態を変更するにはどうすればよいですか?

  14. 14

    状態が変化した後、Reactが再レンダリングされないのですが、子コンポーネントの状態を設定するにはどうすればよいですか?

  15. 15

    子コンポーネントが親コンポーネントを介してフィルタリングされるときに子コンポーネントの状態を維持するにはどうすればよいですか?

  16. 16

    ReactJSの親コンポーネントにイベントリスナーを設定するにはどうすればよいですか?

  17. 17

    Reactコンポーネントの状態を更新するにはどうすればよいですか?

  18. 18

    反応:子コンポーネント(クラスコンポーネントではなく関数コンポーネント)の状態を親から変更するにはどうすればよいですか?

  19. 19

    React Material UIのAppBarコンポーネント内でコンテナーを設定するにはどうすればよいですか?

  20. 20

    Swing:コンポーネントの高さをコンテナの高さに設定するにはどうすればよいですか?

  21. 21

    Switchコンポーネントを別個の列としてTableコンポーネントに統合し、両方に別個の状態を設定するにはどうすればよいですか?

  22. 22

    コンポーネントの外部でコンポーネントの状態を変更するにはどうすればよいですか?

  23. 23

    RN 0.61で状態が変化したときに、メインコンポーネントから子コンポーネントを再レンダリングするにはどうすればよいですか?

  24. 24

    reactjsで1つのコンポーネント(子コンポーネント)から別のコンポーネント(親コンポーネント)に値を取得するにはどうすればよいですか?

  25. 25

    vue jsのログインコンポーネントからユーザーの状態を更新するにはどうすればよいですか?

  26. 26

    子コンポーネント内で使用する親の状態を渡すにはどうすればよいですか?

  27. 27

    ダイナミックパネルをコンポーネントの親として設定するにはどうすればよいですか?

  28. 28

    小道具として渡されたときに、状態を親コンポーネントから子コンポーネントに更新するにはどうすればよいですか?

  29. 29

    Reactで一度に1つのコンポーネントのアクティブ状態を設定し、他のすべてのコンポーネントのアクティブ状態を削除するにはどうすればよいですか?

ホットタグ

アーカイブ