子コンポーネントに、クリック時にその親関数からコールバックをトリガーするHTML要素があります。コールバックは親コンポーネントの状態を変更します。変更された状態は、次に、if文の条件で使用される親に戻されます。 toggle
(親からの小道具)は、ストア内の値を変更するアクションをディスパッチします。しかし、このディスパッチはストアを変更することになり、親コンポーネント内の小道具の1つが子コンポーネントにも渡されます。componentWillUpdateが無限ループを起こさないようにするにはどうすればよいですか?
この結果、私はこれを自分のコードに挿入すると無限ループに陥ります。
/* no state changes to the current component */
componentWillUpdate(nextProps) {
const {
// ... some props
toggle, // func
} = nextProps;
if (/* case 1 of 2*/)
toggle(true);
} else (/* case 2 of 2 */) {
toggle(false);
}
}
onClick
は、上記のステートメントが依存している場合、その親の状態でフィールドを変更するコールバックをトリガするので、私はcomponentWillUpdate
(またはいくつかにif文をスローする必要があるが、私はif文を実行することができますAPIに反応します親の状態への変更が完了したら(onClick
ファンクションコールではなく)
私はクリックした後に1回だけトリガーしたいと思っています。無限にループするにはどうすればよいですか?
しかし、 'onClick'でトリガされる関数は、親の状態を変更するコールバック(小道具)です。したがって、ReactがonClickを中断してコールバックを続行するかどうか、またはonClickでコードの残りの部分が終了するかどうかはわかりません(onClickでコードを記述する場合)。 – AlanH
あなたのコードの残りの部分を投稿してください – Pineda
'onClick'は状態を変えても大丈夫です。この時点で、 'toggle()'に含まれる 'state'の変更を追加することも可能です(そのロジックは' state'にも依存しているため)。したがって、トグルが呼び出されると、それは別の '状態'の変化を引き起こさず、無限ループを壊します。 – Pineda