ボタンをクリックしたときにレデューサーからデータを取得できないのはなぜですか?

エンボ

React と Redux を使用して簡単なアプリを構築しています。上、左、下、右の 4 つのボタンがあります。「上」をクリックするとアイテムが上に移動し、「下」をクリックするとアイテムが下に移動します。しかし、ボタンをクリックしてもアイテムがまったく動きません。さらに悪いことに、それらをクリックしたときにコンソールにエラー メッセージが表示されませんでした。これまでの私のコードは次のとおりです。

import React from 'react';
import ReactDOM from 'react-dom';
import { Provider, connect } from 'react-redux';
import { createStore, combineReducers } from 'redux';
import './index.css';
import registerServiceWorker from './registerServiceWorker';

const reducers = combineReducers({
    vertical: (state={style: 40}, action) => {
        console.log("Inside the vertial reducer", action.type);
        if (action.type === "UP") {
            //Reassign outside the return statement
            state.style = state.style - 10;
            return state;
        } else if (action.type === "DOWN") {
            state.style = state.style + 10;
            return state;
        } else {
            return state;
        }
    },

    horizontal: (state={style: 40}, action) => {
        console.log("Inside the horizontal reducer", action.type);
        if (action.type === "LEFT") {
            state.style = state.style - 10;
            return state;
        } else if (action.type === "RIGHT") {
            state.style = state.style + 10;
            return state;
        } else {
            return state;
        }
    }
});

const a = state => {
    return {
        vertical: state.vertical.style,
        horizontal: state.horizontal.style
    };
};

const b = dispatcher => {
    return {
        clickUp: () => {
            dispatcher({ type: "UP" })
        },
        clickDown: () => {
            dispatcher({ type: "DOWN" })
        },
        clickLeft: () => {
            dispatcher({ type: "LEFT" })
        },
        clickRight: () => {
            dispatcher({ type: "RIGHT" })
        }
    };
};

const container = connect(a, b);

//This is my component
const C = ({ vertical, horizontal, clickUp, clickDown, clickLeft, clickRight }) => {
        console.log("this is from C", vertical);
        return (
            <div>
                <button onClick={clickUp}>Up</button>
                <button onClick={clickDown}>Down</button>
                <button onClick={clickLeft}>Left</button>
                <button onClick={clickRight}>Right</button>
                <img style={{top:vertical+"px", left:horizontal+"px", position:"absolute", width:"40px", height:"40px"}} src={"https://media.licdn.com/mpr/mpr/shrinknp_400_400/AAEAAQAAAAAAAAglAAAAJDIwYjM0NDEwLTViMTMtNGE2Yi05OGZlLTUwOGE2N2IxMjFlOQ.jpg"} alt="" />
            </div>
        );
};

const App = container(C);

const store = createStore(reducers);

ReactDOM.render(
    <Provider store={store}>
        <App />
    </Provider>, document.getElementById('root'));
registerServiceWorker();

console.logは myverticalhorizontalreducer のタイプであり、ボタンをクリックしたときに正しいタイプを提供しています。私がしようとしたとき、私の中でコンポーネント私はボタンをクリックしたとき、私は、任意の値を取得しておりません。コンソールで番号をログアウトすることになっていますが、そうではありません。したがって、コンソールにエラーを表示せずにボタンをクリックしても、状態が更新されていないようです。コードを何度も調べましたが、何も見つかりませんでした。コードを修正する方法と、コードが静かに失敗する理由についてアドバイスをいただけますか?console.logverticalC

アヌジ

レデューサーでは、新しい状態を作成するのではなく、以前の状態を上書きしています。Redux は、コンポーネントの状態が以前と同じであると考えているため、コンポーネントの状態を更新しません。そのため、再表示プロセスを最適化しようとしますが、そうしません。

レデューサーを次のように更新すると、アプリは期待どおりに動作するはずです。

const reducers = combineReducers({
    vertical: (state={style: 40}, action) => {
        switch (action.type) {
            case 'UP': {
                return Object.assign({}, state, {
                    style: state.style - 10
                });
            }
            case 'DOWN': {
                return Object.assign({}, state, {
                    style: state.style + 10
                });
            }
            default: {
                return state;
            }
        }
    },

    horizontal: (state={style: 40}, action) => {
        switch (action.type) {
            case 'LEFT': {
                return Object.assign({}, state, {
                    style: state.style - 10
                });
            }
            case 'RIGHT': {
                return Object.assign({}, state, {
                    style: state.style + 10
                });
            }
            default: {
                return state;
            }
        }
    }
});

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

Firebaseがリサイクラービューのコレクションからデータをクエリできないのはなぜですか?

分類Dev

Firebaseがリサイクラービューのコレクションからデータをクエリできないのはなぜですか?

分類Dev

送信ボタンをクリックした後、データをクリアできないのはなぜですか?

分類Dev

クエリでデータを送信できず、GraphQLのミューテーションでデータを取得できないのはなぜですか?

分類Dev

applyとpandasDateOffsetを使用した計算でデータフレームの数値インデックスを使用できないのはなぜですか?

分類Dev

SQLiteデータベースから選択した特定の値を取得するにはどうすればよいですか?ボタンをクリックすると、アプリの突き出しがクラッシュします

分類Dev

外部ネットにリンクしているときにデータパッケージをキャプチャできないのはなぜですか?

分類Dev

データボリュームをバックアップするときに、dockerが「アクセスが拒否されました」というプロンプトを表示するのはなぜですか?

分類Dev

Chromeからドキュメントをアップロードするために検索するときに、nautilusがサブディレクトリを検索しないのはなぜですか?

分類Dev

Chromeからドキュメントをアップロードするために検索するときに、nautilusがサブディレクトリを検索しないのはなぜですか?

分類Dev

jsonソースからデータをウェブスクレイピングするのに、なぜ1行しか取得できないのですか?

分類Dev

テーブルでボタンをクリックしたときにプログレスバーを非表示にする方法、データをサーバーから動的に取得する(ループの繰り返し)

分類Dev

Vue.jsのボタンをクリックしたときにアラート機能が機能しないのはなぜですか

分類Dev

NodeJSにパスポートをインポートしたときにMongoDBからデータが取得されないのはなぜですか

分類Dev

Redisのトランザクションでキャッシュされたデータを取得できないのはなぜですか?

分類Dev

セレンの使用中にリンクからすべてのデータを取得できない

分類Dev

プロデューサースレッドがタスクを完了しないのはなぜですか?

分類Dev

悪意のあるユーザーがデータをクエリしたときに、Firestoreの膨大なコレクションからのドキュメント読み取りの数を制限するにはどうすればよいですか?

分類Dev

WebSocketを使用してFastAPIからデータのライブストリームを取得しようとしたときのエラーを修正するにはどうすればよいですか(サポートされていないアップグレードリクエスト)。

分類Dev

AndroidのFirebaseディープリンクURLからクエリパラメータを取得できないのはなぜですか?

分類Dev

ユーザーがタスクバーボタンをクリックしたときにモーダルDelphiフォームがWM_SYSCOMMANDを受け取らないのはなぜですか?

分類Dev

Cookieデータを保存したWebサイトにログインできないのはなぜですか?

分類Dev

HTML を追加した後に Bootstrap ボタンをクリックできないのはなぜですか?

分類Dev

デリゲートメソッドの一部として同じジェネリックによって定義されたパラメーターからジェネリック型を推測できないのはなぜですか?

分類Dev

セレンでこする、クリックして隠しテーブルに必要なデータをロードするボタンを取得できない

分類Dev

Jqueryを使用してボタンをクリックしたときに各行のデータを更新するにはどうすればよいですか?

分類Dev

std :: condition_variableを使用しているときに、コンシューマーがロックを取得できなかったのに対し、プロデューサーがロックを取得する可能性を減らすにはどうすればよいですか?

分類Dev

クリックされたときにrecyclerviewアイテムとサブアイテムを変更し、フラグメントからクリックされた位置のデータを取得するにはどうすればよいですか?

分類Dev

このボタンをクリックしたときにランダムなスペースがあるのはなぜですか?

Related 関連記事

  1. 1

    Firebaseがリサイクラービューのコレクションからデータをクエリできないのはなぜですか?

  2. 2

    Firebaseがリサイクラービューのコレクションからデータをクエリできないのはなぜですか?

  3. 3

    送信ボタンをクリックした後、データをクリアできないのはなぜですか?

  4. 4

    クエリでデータを送信できず、GraphQLのミューテーションでデータを取得できないのはなぜですか?

  5. 5

    applyとpandasDateOffsetを使用した計算でデータフレームの数値インデックスを使用できないのはなぜですか?

  6. 6

    SQLiteデータベースから選択した特定の値を取得するにはどうすればよいですか?ボタンをクリックすると、アプリの突き出しがクラッシュします

  7. 7

    外部ネットにリンクしているときにデータパッケージをキャプチャできないのはなぜですか?

  8. 8

    データボリュームをバックアップするときに、dockerが「アクセスが拒否されました」というプロンプトを表示するのはなぜですか?

  9. 9

    Chromeからドキュメントをアップロードするために検索するときに、nautilusがサブディレクトリを検索しないのはなぜですか?

  10. 10

    Chromeからドキュメントをアップロードするために検索するときに、nautilusがサブディレクトリを検索しないのはなぜですか?

  11. 11

    jsonソースからデータをウェブスクレイピングするのに、なぜ1行しか取得できないのですか?

  12. 12

    テーブルでボタンをクリックしたときにプログレスバーを非表示にする方法、データをサーバーから動的に取得する(ループの繰り返し)

  13. 13

    Vue.jsのボタンをクリックしたときにアラート機能が機能しないのはなぜですか

  14. 14

    NodeJSにパスポートをインポートしたときにMongoDBからデータが取得されないのはなぜですか

  15. 15

    Redisのトランザクションでキャッシュされたデータを取得できないのはなぜですか?

  16. 16

    セレンの使用中にリンクからすべてのデータを取得できない

  17. 17

    プロデューサースレッドがタスクを完了しないのはなぜですか?

  18. 18

    悪意のあるユーザーがデータをクエリしたときに、Firestoreの膨大なコレクションからのドキュメント読み取りの数を制限するにはどうすればよいですか?

  19. 19

    WebSocketを使用してFastAPIからデータのライブストリームを取得しようとしたときのエラーを修正するにはどうすればよいですか(サポートされていないアップグレードリクエスト)。

  20. 20

    AndroidのFirebaseディープリンクURLからクエリパラメータを取得できないのはなぜですか?

  21. 21

    ユーザーがタスクバーボタンをクリックしたときにモーダルDelphiフォームがWM_SYSCOMMANDを受け取らないのはなぜですか?

  22. 22

    Cookieデータを保存したWebサイトにログインできないのはなぜですか?

  23. 23

    HTML を追加した後に Bootstrap ボタンをクリックできないのはなぜですか?

  24. 24

    デリゲートメソッドの一部として同じジェネリックによって定義されたパラメーターからジェネリック型を推測できないのはなぜですか?

  25. 25

    セレンでこする、クリックして隠しテーブルに必要なデータをロードするボタンを取得できない

  26. 26

    Jqueryを使用してボタンをクリックしたときに各行のデータを更新するにはどうすればよいですか?

  27. 27

    std :: condition_variableを使用しているときに、コンシューマーがロックを取得できなかったのに対し、プロデューサーがロックを取得する可能性を減らすにはどうすればよいですか?

  28. 28

    クリックされたときにrecyclerviewアイテムとサブアイテムを変更し、フラグメントからクリックされた位置のデータを取得するにはどうすればよいですか?

  29. 29

    このボタンをクリックしたときにランダムなスペースがあるのはなぜですか?

ホットタグ

アーカイブ