2つの異なるコンポーネントで同じredux状態を同時に更新するにはどうすればよいですか?

JoeBe

React Nativeシナリオがあり、1つはatextInputで、もう1つはSVG図面です。に入力してtextInputボタンを押すと、dispatchアクションを使用して、redux状態で格納されている配列にデータインスタンスとしてテキストが挿入されます(これを呼び出しますtextListState)。

//TEXT INPUT COMPONENT
//this code is just for presentation. it will cause errors obviously
const dispatch = useDispatch();
const submitHandler = (enteredText) => {
    dispatch(submitData(enteredText))
};

return(
    <TextInput ...... />
    <TouchableOpacity onPress={() => submitHandler(enteredText) } />
)

これで、SVGコンポーネントはtextListState、関数を使用して保存されているすべての機能の塗りつぶし色を更新します(例setFillColor)。これはuseEffect、依存関係が小道具に設定されたフック内で行われます(例propA)。

ここで問題となるのはtextListStateuseEffectから新しく入力したテキストをコンポーネントにtextInput含めるために、依存関係として追加する必要があることですSVGしかし、そうすることで、setFillColorも更新されるため、無限ループを作成していますtextListState

//SVG COMPONENT
const [textList, setTextList] = useState([]);
const textListState = useSelector(state => state.textListState);

const dispatch = useDispatch();
const setFillColor= useCallback((id, fill) => {
    dispatch(updateFillColor(id, fill))
}, [dispatch]);

useEffect(() => {
    //INFINITE LOOP BECAUSE textListState  KEEPS UPDATING WITH setFillColor
    const curTextList = [];

    for (const [i, v] of textListState.entries()) {
        setFillColor(5, "white")

        curTextList.push(
            <someSVGComponent />
        )
    }
    setTextList(curTextList);
}, [props.propA, textListState])

return(
    <G>
        {textList.map(x => x)}
    </G>
)

SVG無限ループを作成せずに、新しく挿入されたテキストをコンポーネントに追加できるようにするにはどうすればよいですか?


編集:

リダックスアクション

export const UPDATE_TEXT = "UPDATE_TEXT";
export const SUBMIT_DATA = "SUBMIT_DATA";

export const updateFillColor = (id, fill) => {
    return { type: UPDATE_TEXT, id: id, fill: fill }
};

export const submitData= (text) => {
    return { type: SUBMIT_DATA, text: text }
};

reduxレデューサー

import { TEXT } from "../../data/texts";
import { UPDATE_TEXT } from "../actions/userActions";
import { INSERT_TEXT } from "../actions/userActions";

// Initial state when app launches
const initState = {
    textListState: TEXT
};

const textReducer = (state = initState, action) => {
    switch (action.type) {
        case INSERT_TEXT :
            return {
                ...state,
                textListState: [
                    ...state.textListState,
                    action.text
                ]
            }
        case UPDATE_TEXT :
            const curText = state.textListState.filter(text => text.id === action.id)[0];

            return {
                ...state,
                textListState: [
                    ...state.textListState.slice(0, curIndex), //everything before current text
                    curText.fill = action.fill,
                    ...state.textListState.slice(curIndex + 1), //everything after current text
                ]
            }

        default:
            return state;
    }
};

export default textReducer;
Mohit Singh

新しいテキストが追加されたときにのみuseEffectをトリガーする場合textListState.lengthtextListState、依存関係リストの代わりにを使用します。

アップデートや挿入時にそれの両方を行いたい場合は、ブール値のフラグを使用します(テキストが入力で更新された場合でも、あなたが火を付けるIE)textUpdatedtextListState、更新または挿入して使用があるたびに、それをトグル保つtextListState.textUpdated依存関係リストでは。

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

同じ角度ルートを使用して、2つの異なるルーターアウトレットで2つの異なるコンポーネントをレンダリングするにはどうすればよいですか?

分類Dev

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

分類Dev

同じデータを表す2つの異なるReactコンポーネントインスタンスを更新するにはどうすればよいですか?

分類Dev

同じ状態名の複数のコンポーネント、他のコンポーネントに影響を与えずに1つのコンポーネントの1つの状態を変更するにはどうすればよいですか?

分類Dev

同じコンポーネントに異なるサービストークンを挿入するにはどうすればよいですか?

分類Dev

同じクラスの別のメソッドでコンストラクターの状態を更新するにはどうすればよいですか?

分類Dev

同じCorDappで2つの異なるレスポンダーフローをテストするにはどうすればよいですか?

分類Dev

Angular 2テーブルコンポーネント間でデータを共有して、それぞれが異なるデータを持つことができるが、同じテーブルコンポーネントのみを使用するようにするにはどうすればよいですか?

分類Dev

同じ行に2つの異なる色(コンソール)でテキストを印刷するにはどうすればよいですか?

分類Dev

Reactコンポーネントの作成時にRedux状態を初期化するにはどうすればよいですか?

分類Dev

同じPythonモジュールの2つのバージョンを同時にインポートするにはどうすればよいですか?

分類Dev

2つのコンポーネントで同じ検証フィールドを使用するにはどうすればよいですか?

分類Dev

同じファイルjsの2つのコンポーネントを作成するにはどうすればよいですか?

分類Dev

同じルートとコンポーネントを使用しながら、パスの変更時にコンポーネントを更新するにはどうすればよいですか?

分類Dev

C ++ 2つの異なるstd :: lists内の同じ要素を参照するポインターを削除するにはどうすればよいですか?

分類Dev

2つのコンポーネントが同じイベントにサブスクライブするにはどうすればよいですか?

分類Dev

同じインストールで2つの異なるバージョンのワインを使用するにはどうすればよいですか?

分類Dev

複数のコンポーネントがデータをフェッチするためにVuexで同じアクションを使用する場合の状態を処理するにはどうすればよいですか?

分類Dev

Angular 2の同じコンポーネントで複数のngコンテンツを使用するにはどうすればよいですか?

分類Dev

コレクションの下で同じuid(状態のようなフィールドの1つ)を持つ異なるドキュメントの特定のフィールド(状態)の値を変更するにはどうすればよいですか?

分類Dev

更新された小道具を同じ関数のreact関数コンポーネントで取得するにはどうすればよいですか?

分類Dev

同じウィンドウで2つのmatplotlibプロットを同時に表示および更新するにはどうすればよいですか?

分類Dev

1つのファイルを2つの異なるストリームに同時にリンクするにはどうすればよいですか?

分類Dev

componentWillUnmountに保存されているコンポーネントのredux状態をクリアするにはどうすればよいですか?

分類Dev

githubの同じブランチで2つの異なるコミットを比較するにはどうすればよいですか?

分類Dev

2つの反応コンポーネント間で共有状態を作成するにはどうすればよいですか?

分類Dev

同じコンポーネントでreact-reduxを使用してロードフラグを制御するにはどうすればよいですか?

分類Dev

Reduxの状態変更に基づいてReactコンポーネントのsetState()を作成するにはどうすればよいですか?

分類Dev

異なる時間に同じ列に2つのレコードを保存するにはどうすればよいですか?

Related 関連記事

  1. 1

    同じ角度ルートを使用して、2つの異なるルーターアウトレットで2つの異なるコンポーネントをレンダリングするにはどうすればよいですか?

  2. 2

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

  3. 3

    同じデータを表す2つの異なるReactコンポーネントインスタンスを更新するにはどうすればよいですか?

  4. 4

    同じ状態名の複数のコンポーネント、他のコンポーネントに影響を与えずに1つのコンポーネントの1つの状態を変更するにはどうすればよいですか?

  5. 5

    同じコンポーネントに異なるサービストークンを挿入するにはどうすればよいですか?

  6. 6

    同じクラスの別のメソッドでコンストラクターの状態を更新するにはどうすればよいですか?

  7. 7

    同じCorDappで2つの異なるレスポンダーフローをテストするにはどうすればよいですか?

  8. 8

    Angular 2テーブルコンポーネント間でデータを共有して、それぞれが異なるデータを持つことができるが、同じテーブルコンポーネントのみを使用するようにするにはどうすればよいですか?

  9. 9

    同じ行に2つの異なる色(コンソール)でテキストを印刷するにはどうすればよいですか?

  10. 10

    Reactコンポーネントの作成時にRedux状態を初期化するにはどうすればよいですか?

  11. 11

    同じPythonモジュールの2つのバージョンを同時にインポートするにはどうすればよいですか?

  12. 12

    2つのコンポーネントで同じ検証フィールドを使用するにはどうすればよいですか?

  13. 13

    同じファイルjsの2つのコンポーネントを作成するにはどうすればよいですか?

  14. 14

    同じルートとコンポーネントを使用しながら、パスの変更時にコンポーネントを更新するにはどうすればよいですか?

  15. 15

    C ++ 2つの異なるstd :: lists内の同じ要素を参照するポインターを削除するにはどうすればよいですか?

  16. 16

    2つのコンポーネントが同じイベントにサブスクライブするにはどうすればよいですか?

  17. 17

    同じインストールで2つの異なるバージョンのワインを使用するにはどうすればよいですか?

  18. 18

    複数のコンポーネントがデータをフェッチするためにVuexで同じアクションを使用する場合の状態を処理するにはどうすればよいですか?

  19. 19

    Angular 2の同じコンポーネントで複数のngコンテンツを使用するにはどうすればよいですか?

  20. 20

    コレクションの下で同じuid(状態のようなフィールドの1つ)を持つ異なるドキュメントの特定のフィールド(状態)の値を変更するにはどうすればよいですか?

  21. 21

    更新された小道具を同じ関数のreact関数コンポーネントで取得するにはどうすればよいですか?

  22. 22

    同じウィンドウで2つのmatplotlibプロットを同時に表示および更新するにはどうすればよいですか?

  23. 23

    1つのファイルを2つの異なるストリームに同時にリンクするにはどうすればよいですか?

  24. 24

    componentWillUnmountに保存されているコンポーネントのredux状態をクリアするにはどうすればよいですか?

  25. 25

    githubの同じブランチで2つの異なるコミットを比較するにはどうすればよいですか?

  26. 26

    2つの反応コンポーネント間で共有状態を作成するにはどうすればよいですか?

  27. 27

    同じコンポーネントでreact-reduxを使用してロードフラグを制御するにはどうすればよいですか?

  28. 28

    Reduxの状態変更に基づいてReactコンポーネントのsetState()を作成するにはどうすればよいですか?

  29. 29

    異なる時間に同じ列に2つのレコードを保存するにはどうすればよいですか?

ホットタグ

アーカイブ