私のReactコンポーネントにはかなり基本的な機能があり、期待通りに機能しません。コンポーネント自体はページ上部のナビゲーションバーです。私は、そのようにnavの中にあるハンバーガーアイコンをクリックすることによって起動されるモバイル画面用のスライドアウトメニューを実装したいと思います。私は単にこの関数は、私は私のハンバーガーから呼び出していますtrue
とfalse
間visible
値を、切り替えるために設定している瞬間のためにReact - 関数が2回目に呼び出されるまで、this.setStateは期待通りに機能しません。
<a href="javascript:void(0)" onClick={this.toggleMenu.bind(this)}><i className="fa fa-bars" /></a>
。
toggleMenu() {
console.log('Burger clicked... ', this.state.visible);
this.setState({ visible: !this.state.visible });
console.log('Visible changed.. ', this.state.visible);
var value = "A message from the burger...";
this.props.sendData(value, this.state.visible);
}
問題は、ハンバーガーのアイコンが二度目にクリックされるまで、false
の初期値から切り替わらないthis.setState({ visible: !this.state.visible });
です。
ここにコンポーネントのコンストラクタがあります。
constructor() {
super();
this.state = {
visible: false,
};
}
私はリアクションには比較的新しいので、まだ自分の道を探しています。もし誰かが私にこの問題を解決する方法を教えてもらえたら、私はとても感謝しています。前もって感謝します!
ありがとうございます。これが動作している間、少し畳み込まれているようです。 Reactのトグル/スイッチ操作を処理する標準的な方法として 'prevState'を使用していますか?私は下のバートからコールバックが代わりに使われる答えを試したので尋ねます。これは動作しますが、 'this.setState.visible'をコールバックの追加以外の変更はほとんどありません。これが悪いパターンであるという特別なケースはありますか?入力してくれてありがとう! – mikeym
** **あなたが行っているように古い状態に直接アクセスして新しい状態を計算した場合は、Reactが複数の 'setState'呼び出しをバッチ(エンキュー)してコールバックを渡すので、' setState'関数にコールバックを渡しますしたがって、 'setState'が返った後、あなたの状態はまだ更新されていないかもしれません**。 https://facebook.github.io/react/docs/state-and-lifecycle.html#do-not-modify-state-directly – Dummy
[OK]をさらに読むためのリンクです。情報とリンクをありがとう。それはもうちょっと意味をなさないようになっています。 – mikeym