Reduxを使用してコンポーネントの1つのインスタンスのみを更新するにはどうすればよいですか?

ダスティン

Reduxを使用してカードコンポーネントを更新し、クリック時に色を無効にして変更しようとしています。Reduxはアクションを正常にディスパッチしますが、クリックされたカードだけでなく、すべてのカードを更新します。各カードには、単語と値を保持するオブジェクトが関連付けられています。値は、クリックしたときに色を変更するために使用するclassNameです。

成分

const Card = ({ wordObj, updateClass, isDisabled, cardClass }) => {
    
    const showColor = (e) => {
        updateClass(wordObj);
        console.log(cardClass)
    };
    return (
        <button
            onClick={(e) => showColor()}
            disabled={isDisabled}
            className={cardClass}>
            {wordObj.word}
        </button>
    );
};


const mapStateToProps = (state) => ({
    cardClass: state.game.cardClass,
});
export default connect(mapStateToProps, { updateClass })(Card);

アクション

export const updateClass = (obj) => (dispatch) => {
    console.log(obj)
    dispatch({
        type: UPDATE_CARD,
        payload: obj,
    });
};

レデューサー

const initialState = {
    words: [],
    cardClass: 'card',
    isDisabled: false,
};

export default function (state = initialState, action) {
    const { type, payload } = action;
    switch (type) {
        case SET_WORDS: {
            return {
                ...state,
                words: payload,
            };
        }   

        case UPDATE_CARD:
            return {
                ...state,
                isDisabled: true,
                cardClass: ['card', payload.value].join(' '),
            };

        default:
            return state;
    }
}```
Victor_Maciel

すべてのカードコンポーネントはcardClass、州内の同じフィールドを消費しています。この行で変更すると:

cardClass: ['card', payload.value].join(' ')

このフィールドを消費しているすべてのカードは、クラスが更新されています。同じことがisDisable現場でも起こります。

自分の州のカードごとに1つのオブジェクトを作成する必要があります。これが私の実装です(テストされていません):

const initialState = {
    cards: []
};

export default function (state = initialState, action) {
    const { type, payload } = action;
    switch (type) {
        // create a card object for each word
        case SET_WORDS: {
            return {
                ...state,
                cards: payload.map(word => {
                    return { word: word, cardClass: "card", isDisabled: false }
                })
            };
        }   

        case UPDATE_CARD:
            // here i'm using the wordObj.word passed as payload
            // to identify the card (i recommend to use an id field) 
            const cardIndex = state.cards.findIndex(card => card.word === payload.word);
            // get the current card
            const card = state.cards[cardIndex];
            // create an updated card object obeying the immutability principle
            const updatedCard = { ...card, isDisabled: true, cardClass: ['card', payload.value].join(' '), }
            return {
                ...state,
               cards: [
                   ...state.cards.slice(0, cardIndex), // cards before
                   updatedCard,
                   ...state.cards.slice(cardIndex + 1) // cards after
               ]
                
            };

        default:
            return state;
    }
}

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

Angular 5:1つのルートのみを使用して、コンセントのすべてのパスを同じコンポーネントにルーティングするにはどうすればよいですか?

分類Dev

`redux`ベースのコンポーネントで複数のインスタンスを作成するにはどうすればよいですか?

分類Dev

コンポーネントの状態を保存してreduxストアにサブスクライブするにはどうすればよいですか?

分類Dev

javascriptスタイルのコンポーネントを使用してreactで三項演算子を使用するにはどうすればよいですか?

分類Dev

mount()を使用してネストされたコンポーネントの状態を更新するにはどうすればよいですか?

分類Dev

Redux Promiseを使用してコンポーネントへの解決済みのpromiseを取得するにはどうすればよいですか?

分類Dev

reduxストアのデータでコンポーネントを更新するにはどうすればよいですか?

分類Dev

スタイル付きコンポーネントの場合、すべてのコンポーネントスタイルを.hoverコンポーネントスタイルにカスケードするにはどうすればよいですか?

分類Dev

スタイル付きコンポーネントの場合、すべてのコンポーネントスタイルを.hoverコンポーネントスタイルにカスケードするにはどうすればよいですか?

分類Dev

App.jsの状態に基づいて、兄弟コンポーネントのテキストを更新する1つの子コンポーネントにonClickメソッドを実装するにはどうすればよいですか?

分類Dev

aureliaストアを使用して個々のコンポーネントを更新するにはどうすればよいですか?

分類Dev

子は必要ないので、プロバイダーなしで接続付きの1つのコンポーネントでReduxストアを使用するにはどうすればよいですか?

分類Dev

Knockout.js:登録済みのコンポーネントインスタンスを取得するにはどうすればよいですか?

分類Dev

Oracleのタイムスタンプ値から時間コンポーネントのみを抽出するにはどうすればよいですか?

分類Dev

Angular 6で同じコンポーネントの複数のインスタンスを使用するにはどうすればよいですか?

分類Dev

コンポーネントの特定のインスタンスまたは.netコアの別のデコレータオブジェクトを使用してデコレータを解決するにはどうすればよいですか?

分類Dev

反応スタイルのコンポーネントでカスタムアイコンを使用するにはどうすればよいですか?

分類Dev

reduxに接続されたコンポーネントを孫として持つコンポーネントのストーリーブックストーリーを作成するにはどうすればよいですか?

分類Dev

あるコンポーネントから別のコンポーネントにreduxストアを渡すにはどうすればよいですか?

分類Dev

カスタムLightningコンポーネントを使用したすべての参照ページを取得するにはどうすればよいですか?

分類Dev

配列によってレンダリングされたコンポーネントの1つの要素/インデックスのスタイルを処理するにはどうすればよいですか?

分類Dev

マップインリアクションを使用してレンダリングされたコンポーネントのリストの特定のコンポーネントを変更するにはどうすればよいですか?

分類Dev

CLEARTOOLを使用してストリーム内の1つのコンポーネントのみをリベースするにはどうすればよいですか?

分類Dev

特定のVueコンポーネントとその子にのみcssスタイルを適用するにはどうすればよいですか?

分類Dev

FirebugまたはFirefoxDevToolsのインスペクターを使用して1つの要素のみを表示するにはどうすればよいですか?

分類Dev

React-すべてのコンポーネントを1つにインポートするにはどうすればよいですか

分類Dev

nuxtを使用してコンポーネントのHEADデータにアクセスするにはどうすればよいですか?

分類Dev

コンピュータが1と0のみを使用して「if」ステートメントを作成するにはどうすればよいですか。

分類Dev

styled-componentsを使用して他のコンポーネント内の単一のコンポーネントのスタイルを変更するにはどうすればよいですか?

Related 関連記事

  1. 1

    Angular 5:1つのルートのみを使用して、コンセントのすべてのパスを同じコンポーネントにルーティングするにはどうすればよいですか?

  2. 2

    `redux`ベースのコンポーネントで複数のインスタンスを作成するにはどうすればよいですか?

  3. 3

    コンポーネントの状態を保存してreduxストアにサブスクライブするにはどうすればよいですか?

  4. 4

    javascriptスタイルのコンポーネントを使用してreactで三項演算子を使用するにはどうすればよいですか?

  5. 5

    mount()を使用してネストされたコンポーネントの状態を更新するにはどうすればよいですか?

  6. 6

    Redux Promiseを使用してコンポーネントへの解決済みのpromiseを取得するにはどうすればよいですか?

  7. 7

    reduxストアのデータでコンポーネントを更新するにはどうすればよいですか?

  8. 8

    スタイル付きコンポーネントの場合、すべてのコンポーネントスタイルを.hoverコンポーネントスタイルにカスケードするにはどうすればよいですか?

  9. 9

    スタイル付きコンポーネントの場合、すべてのコンポーネントスタイルを.hoverコンポーネントスタイルにカスケードするにはどうすればよいですか?

  10. 10

    App.jsの状態に基づいて、兄弟コンポーネントのテキストを更新する1つの子コンポーネントにonClickメソッドを実装するにはどうすればよいですか?

  11. 11

    aureliaストアを使用して個々のコンポーネントを更新するにはどうすればよいですか?

  12. 12

    子は必要ないので、プロバイダーなしで接続付きの1つのコンポーネントでReduxストアを使用するにはどうすればよいですか?

  13. 13

    Knockout.js:登録済みのコンポーネントインスタンスを取得するにはどうすればよいですか?

  14. 14

    Oracleのタイムスタンプ値から時間コンポーネントのみを抽出するにはどうすればよいですか?

  15. 15

    Angular 6で同じコンポーネントの複数のインスタンスを使用するにはどうすればよいですか?

  16. 16

    コンポーネントの特定のインスタンスまたは.netコアの別のデコレータオブジェクトを使用してデコレータを解決するにはどうすればよいですか?

  17. 17

    反応スタイルのコンポーネントでカスタムアイコンを使用するにはどうすればよいですか?

  18. 18

    reduxに接続されたコンポーネントを孫として持つコンポーネントのストーリーブックストーリーを作成するにはどうすればよいですか?

  19. 19

    あるコンポーネントから別のコンポーネントにreduxストアを渡すにはどうすればよいですか?

  20. 20

    カスタムLightningコンポーネントを使用したすべての参照ページを取得するにはどうすればよいですか?

  21. 21

    配列によってレンダリングされたコンポーネントの1つの要素/インデックスのスタイルを処理するにはどうすればよいですか?

  22. 22

    マップインリアクションを使用してレンダリングされたコンポーネントのリストの特定のコンポーネントを変更するにはどうすればよいですか?

  23. 23

    CLEARTOOLを使用してストリーム内の1つのコンポーネントのみをリベースするにはどうすればよいですか?

  24. 24

    特定のVueコンポーネントとその子にのみcssスタイルを適用するにはどうすればよいですか?

  25. 25

    FirebugまたはFirefoxDevToolsのインスペクターを使用して1つの要素のみを表示するにはどうすればよいですか?

  26. 26

    React-すべてのコンポーネントを1つにインポートするにはどうすればよいですか

  27. 27

    nuxtを使用してコンポーネントのHEADデータにアクセスするにはどうすればよいですか?

  28. 28

    コンピュータが1と0のみを使用して「if」ステートメントを作成するにはどうすればよいですか。

  29. 29

    styled-componentsを使用して他のコンポーネント内の単一のコンポーネントのスタイルを変更するにはどうすればよいですか?

ホットタグ

アーカイブ