7

ページとsaveボタンにエディターがあります。save変更がある場合にのみボタンを表示したい(最後の保存以降)。したがって、保存するthis.setState({hasChanges: false})と、onChange関数で設定され、に設定さhasChangestrueます。

そして、それはすべて正常に機能しています。問題は、エディターがonChangeフォーカスを取得したときにエディターがイベントを発生させることです (ただし、コンテンツはまだ変更されていません)。そして、それはドキュメントによると予想される動作です

コンポーネント内のイベント リスナーは、フォーカスの変更を監視し、期待どおりに onChange を介して伝播するため、状態と DOM は正しく同期されたままになります。

onChangeメソッド内でコンテンツが変更されたかどうか、または選択のみが変更されたかどうかを知る方法はありますか?

4

3 に答える 3

12

あなたの質問への回答を本日 github に投稿しましたが、今後の参考のためにここにも追加します。

変更のたびに onChange が呼び出されるという点で、あなたは正しいですeditorState。また、はと のeditorState両方を保持するため、コンテンツの編集時と選択/フォーカスの変更時の両方で変更されます。selectionStatecontentState

onChangeメソッドをトリガーした変更が にあったのcontentStateか にあったのかを知りたい場合は、selectionStateそれらを古い値と比較できます。

function onChange(newState) {
  const currentContentState = this.state.editorState.getCurrentContent()
  const newContentState = newState.getCurrentContent()

  if (currentContentState !== newContentState) {
    // There was a change in the content  
  } else {
    // The change was triggered by a change in focus/selection
  }
}

ここで、変更が にあったことがわかっている場合は、newState.getLastChangeType()contentStateを呼び出して、さらに詳しい情報を取得できます。これらの値のいずれかを返す必要があります(ユーザーまたは追加したプラグインが新しい変更タイプを作成していない限り)。

于 2016-12-01T21:31:50.333 に答える