2016-12-01 1 views
1

ページにはエディタがあり、saveボタンがあります。私はsaveボタンが変更があった場合にのみ表示されるようにしたいです(最後の保存以降)。だから、あなたが保存するとき、私はthis.setState({hasChanges: false})onChangeに設定hasChangestrueに設定します。DraftJSはコンテンツの変更をトリガしますか?

それでも問題ありません。問題は、編集者がフォーカスを獲得したとき(ただしコンテンツはまだ変更されていない)、onChangeイベントを発生させることです。そして、それが予想される動作です彼らのdocumentation

に応じてコンポーネント内でイベントリスナーは、フォーカスが を変更観察すると、予想通りのonChangeを介してそれらを伝播し、その状態とDOMは は同期で正しくままになります。

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

答えて

2

私はgithubの上のあなたの質問今日以前にこの回答を投稿が、私は今後の参考のためにもそれをここに追加します:

あなたはそれのonChangeで正しいですが毎回editorState変化と呼ばれています。 editorStateselectionStatecontentStateの両方を保持しているため、コンテンツ編集時と選択/フォーカスが変更されたときの両方で変更されます。

あなたが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 
    } 
} 

、あなたがその変更を知っていればcontentStateに入っていた場合は、newState.getLastChangeType()に電話して詳細を確認できます。 these valuesのいずれかが返されます(追加したプラグインまたは新しい変更タイプが作成されている場合を除きます)。

関連する問題