非常に単純な構文強調を持つテキストフィールドを使用してReactフォームを作成したいが、JSXなしでそれをやりたいDraftJSをJSXなしで使用する方法はありますか?JSXを使用しないReactを使用した構文ハイライト
答えて
div
をcontenteditable="true"
で使用すると、Draft.jsなしで実行できます。ここまで私がこれまでに取り組んだことがあります。この例では、母音を緑色で強調表示するという強調ルールがあります。
正常に動作しますが、適切な場所に選択を保つためにコードを追加する必要があります。
代わりにDraftJSを使用する方法はありますか?これを行う簡単な方法はありますか?
var SpanEditor = React.createClass({
handleChange: function(event) {
for (
var i = 0;
i < this.contentSpan.childNodes.length;
i++) {
var child = this.contentSpan.childNodes[i];
if (child.childNodes.length > 1) {
while (child.childNodes.length > 0) {
var grandchild = child.childNodes[0];
child.removeChild(grandchild);
if (grandchild.nodeName == '#text') {
var grandchildText = grandchild;
grandchild = document.createElement(
'span');
grandchild.appendChild(grandchildText);
}
this.contentSpan.insertBefore(
grandchild,
child);
}
this.contentSpan.removeChild(child);
child = this.contentSpan.childNodes[i];
}
if (child.nodeName == 'SPAN') {
var childText = child.textContent,
childClass = child.className;
for (var j = 0; j < childText.length; j++) {
var c = childText.charAt(j),
className = (
'aeiouAEIOU'.indexOf(c) >= 0
? 'vowel'
: '');
if (className != childClass) {
if (j == 0) {
child.className = className;
}
else {
var newChild = document.createElement(
'span');
newChild.className = childClass;
newChild.appendChild(
document.createTextNode(
childText.substring(0, j)));
child.childNodes[0].nodeValue = (
childText.substring(j));
child.className = className;
this.contentSpan.insertBefore(
newChild,
child);
j = childText.length;
}
}
}
}
}
},
mountContentSpan: function(span) {
this.contentSpan = span;
var child = document.createElement('span');
child.appendChild(document.createTextNode(
'Type something.'));
this.contentSpan.appendChild(child);
this.handleChange();
},
render: function() {
return React.createElement(
'span',
{
id: 'z',
onInput: this.handleChange,
contentEditable: true,
suppressContentEditableWarning: true,
ref: this.mountContentSpan
});
}
});
var rootElement =
React.createElement('div', {},
React.createElement(
'p',
{},
'Edit the next paragraph.'),
React.createElement(SpanEditor)
)
ReactDOM.render(
rootElement,
document.getElementById('react-app'))
span.vowel {
background-color: lime;
}
<div id="react-app"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.js"></script>
あることを確認。 draft-jsを使うとずっと簡単になりますが、このような重いエディタを使ってこの単純な仕事をする必要があるかどうかは疑問です。見てくださいhttps://facebook.github.io/draft-js/docs/advanced-topics-decorators.html#content
JSXなしでDraft.jsを使用する方法がありますか?あなたが提供したリンクは、Draft.jsでJSXを使ってデコレータを設定する方法を教えてくれます。テキストフィールドに単純な構文ハイライトを含むプレーンな静的なJavascriptサイトを作成しようとしています。 –
はい、それは可能です、私たちの会社でdraftjsを使用し、jsxなしでかなり良いことが判明。あなたは何かをここに見つけるかもしれないhttps://github.com/nikgraf/awesome-draft-js。また、私は今構築しているエディタをオープンソースにしようとしています。多くのコードリファクタリングがありますので、いつからそれを知りましょう。 – kaushik94
ブラウザでBabelとES6 shimを実行できます。この方法では、ブラウザにJSXとES6を実装するサポートスクリプトを含めます。 Draft.jsプロジェクトには、この手法を使用するexamplesが含まれています。ここに含まれますサポートスクリプトです:
<script src="../../node_modules/react/dist/react.min.js"></script>
<script src="../../node_modules/react-dom/dist/react-dom.js"></script>
<script src="../../node_modules/immutable/dist/immutable.js"></script>
<script src="../../node_modules/es6-shim/es6-shim.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.34/browser.js"></script>
<script src="../../dist/Draft.js"></script>
このアプローチの欠点は、ユーザーのブラウザが実際にあなたのコードを実行する前に、バビロンのtranspilerを実行し、ソースコードの多くをダウンロードしなければならないことです。
設定が簡単です。サポートスクリプトを自分でホストすることも、cdnjs.comのようなCDNバージョンにリンクすることもできます。新しいバージョンのコードをデプロイするとは、メインスクリプトを編集し、変更されたバージョンをデプロイすることだけです。
React-jsコードに基づいて静的なWebサイトを展開するためのツールがいくつかあります。私はまだそれらを試していないが、彼らは有望に見える。
これら
-
全てが反応-jsのため
complementary toolsのリストから来ます。
- 1. Mindscapeを使用しないVS2010のSCSS構文ハイライト
- 2. ブラウザはReactを使用してJSXを認識しません
- 3. State null in ES6構文を使用したReactネイティブ
- 4. Webpack、Babel and Reactを使用したIE11の構文エラー
- 5. SyntaxError:構文解析エラー - react-pdf-jsライブラリを使用したWkhtmltopdf
- 6. return()内でブロックを使用できないReact JSX
- 7. CSSを使用しないアクティブリンクのハイライト
- 8. "in jsx"を使用した予期しないトークン
- 9. es6を使用した連結でjsxが機能しない
- 10. ReactでJSXを使用して文字列をレンダリングする方法
- 11. reactjs(JSX)を使用したブートストラップポップアップ
- 12. フィルタとマップでテンプレートリテラル文字列を使用したJsx連結
- 13. ReactJSでJSX以外の構文を使用する場所
- 14. シンプルな構文 - ハイライトはASP.NET MVCで使用できますか?
- 15. コントローラtranscludeを使用した構文
- 16. Mono.Data.SqliteClientライブラリを使用したSQLite構文
- 17. EXISTSを使用したSQL構文エラー
- 18. react jsxで使用中にif-else条件が機能しない理由
- 19. Reactを使用したWordPressテンプレート。不適切な文字
- 20. ハイライトJqueryを使用したクエリ文字列に基づくリンク
- 21. Gtk SourceViewでカスタム言語ハイライト構文を使用するには?
- 22. Flutter - IntelliJでAtom構文のハイライトを使用する
- 23. java.lang.ArrayIndexOutOfBoundsExceptionハイライトを使用しています
- 24. 構文ハイライトを使用して私のレールのブログを操作する
- 25. React。ファット矢印関数を使用したコンポーネント宣言(ES6構文仕様)
- 26. Webpackを使用しないでCSSをjsxにインポートする
- 27. CSSの構文C#で正規表現を使用してハイライト表示
- 28. React/reduxとthunkMiddlewareを使用した構成ストアのバリエーション
- 29. ReactとReduxを使用した認証フローの構造
- 30. 使用ES6構文なしNightmare.jsと
draftjsはテキストフィールドを使用せず、contenteditable domを使用します。 –