2017-11-15 4 views
1

Draft.jsプラグインLinkifyを使用しています。Draft.jsプラグインがいつ用意されているかを知るには?

私は、ローカルストレージからコンテンツを読み込み、それをリンクしようとしています。

今、私はsetTimeoutを使用して、linkifyPluginを待機する必要があります。そうでない場合、読み込まれたコンテンツはリンクされていない純粋なテキストになります。

プラグインの準備が整ったことを知らせるイベントはありますか?

class MyComponent extends Component { 
    constructor(props) { 
    super(props); 

    this.state = { 
     editorState: EditorState.createEmpty() 
    }; 
    } 

    componentDidMount() { 
    // ... 
    if (hasDraft) this.loadEditor(draftFromLocalStorage); 
    } 


    loadEditor = rawContent => { 
    // here I have to use setTimeout to wait linkifyPlugin ready 
    setTimeout(() => { 
     const editorState = EditorState.push(this.state.editorState, convertFromRaw(rawContent)); 
     this.setState({ editorState }); 
    }, 5); 
    }; 


    render() { 
    return (
     <Editor 
     editorState={editorState} 
     plugins={[linkifyPlugin]} 
     onChange={this.onEditorChange} /> 
    ); 
    } 
} 

答えて

0

プラグインは非同期コード持っていると思うする理由はありませんソースコードを見て、Promise

loadEditor(rawContent){ 
    return new Promise((resolve, reject) => { 
    let editorState = EditorState.push(this.state.editorState, convertFromRaw(rawContent)); 
    resolve(editorState); 
    }); 
} 
//call it after component has mounted 
componentDidMount(){ 
    this.loadEditor(draftFromLocalStorage).then(data => this.setState({ editorState: data })); 
} 
+0

ありがとう、私は試しましたが、助けません。事は、私はプラグインを待って、準備ができてエディタ準備ができていないということです。 –

+0

は 'setTimeout'なしで、' this.state.editorState === undefined'ですか? –

+0

'this.state.editorState'には値があります。私の推測では、プラグインはエディタの後に読み込まれます。 –

0

ストレンジを使用してみてください:https://github.com/draft-js-plugins/draft-js-plugins/tree/master/draft-js-linkify-pluginが。あなたはこの関数にブレークポイントを入れてみてください可能性が

https://github.com/draft-js-plugins/draft-js-plugins/blob/master/draft-js-linkify-plugin/src/linkStrategy.js

この関数は、状態のブロック毎に呼ばれるので、あなたは、テキストがLinkifyによって処理されているかどうかを見ることができるはずです。タイムアウトを削除しても関数がまだ呼び出されている場合は、実際の処理ではなくレンダリングに問題があるため、問題は別の場所にあるはずです。

関連する問題