イベントから取得する状態フィールドを設定する必要がありますが、関数に渡すと設定されません。コンポーネントおよび方法は、以下のようになります。ReactJSはevent.persist()でイベントから状態を設定できません
constructor(props: SomeProps, context: any) {
super(props, context);
this.state = {
isFiltering: props.isFiltering,
anchor: "",
};
}
private toggleFilter = (event: any) => {
event.persist()
this.setState(prevState => ({
isFiltering: !prevState.isFiltering,
anchor: event.currentTarget // does not work, it's null
}));
}
私はevent.persist()
を削除した場合、私は次のエラーを取得する:
?この合成イベントは、パフォーマンス上の理由のために再利用されます。これが表示されている場合は、リリース/無効化された合成イベントのメソッド
currentTarget
にアクセスしています。これはノーオペレーション機能です。オリジナルの合成イベントを保持しなければならない場合は、event.persist()を使用してください。詳細については、https://facebook.github.io/react/docs/events.html#event-poolingを参照してください。private toggleFilter = (event: any) => { this.setState({anchor:event.currentTarget}) // works fine this.setState(prevState => ({ isFiltering: !prevState.isFiltering, })); }
はなぜ
:以下のコードが動作するいくつかの理由this.setState(prevState=> ...)
を使用しないで上記の作品をんが
私はsetState'が「非同期」である 'ので、あなたがsetState''に渡す機能が実行される(とイベントがアクセスされた)時点でので、それは、だと思う、イベントはnoですもっと長く。 2番目のバージョンでは、イベントは即座にアクセスされ、 'currentTarget'は' setState'に渡されます。 – thirtydot
@thirtydotそれは意味がありますが、それは 'event.persist()'がこれに適した解決策だと思われますが、私にとってはうまく機能しません。 –
うん。私はなぜそれが機能しないのか分からない(自分でそれをテストせずに)、私は答えを書かなかった。 – thirtydot