2017-02-25 5 views
0

大きな複雑な<table>があり、別のjavascriptフレームワーク(knockout)へのバインディングがたくさんあります。私はその一部をReactに変換しようとしています。tbodyをルートの反応要素として使用する方法

<table> 
    <tbody id="lots_of_legacy_knockout"> ... </tbody> 
    <tbody id="I_want_this_in_React"></tbody> 
</table> 

しかし、これは<tbody>コンテナ内<tbody>ルート要素を入れしようとします:

const Tbody =() => (
    <tbody> 
     <tr /> 
     <tr /> 
     <tr /> 
    </tbody> 
); 
ReactDOM.render(
    <Tbody />, 
    document.getElementById('I_want_this_in_React') 
); 

と望んで反応するので、これはエラーになりユニークなルート要素:

const Tbody =() => ([ 
    <tr />, 
    <tr />, 
    <tr />, 
]); 

ReactDOM.render(
    <Tbody />, 
    document.getElementById('I_want_this_in_React') 
); 

Reactのルート<table>要素全体を書き直すことなく、これをどのように達成できますか?

反応根と反応容器を組み合わせる方法はありますか?

答えて

2

これは、になります:有効なHTMLではありません

// Invalid HTML 
<tbody id="I_want_this_in_React"> 
    <tbody> 
    <tr></tr> 
    <tr></tr> 
    <tr></tr> 
    </tbody> 
</tbody> 

リアクションでは、レンダリングされたコンポーネントが兄弟を全く持たないことが必要なので、リアクションでこれを行う方法はないと思います。

たとえば、あなたはまた、有効なHTMLではないでしょう一部 HTML要素、と<Tr />コンポーネントをラップする必要があります。

// Invalid HTML 
<tbody> 
    <span> 
    <tr></tr> 
    <tr></tr> 
    <tr></tr> 
    </span> 
</tbody> 

あなたの代わりに<table>それ自身にリアクトすることを目的<tbody>を分離することができます方法はありますか?

HTML::

<table id="lots_of_legacy_knockout"> 
    <tbody>...</tbody> 
</table> 

<table id="I_want_this_in_React"></table> 

が反応:

const Tbody =() => (
    <tbody> 
     <tr /> 
     <tr /> 
     <tr /> 
    </tbody> 
); 
ReactDOM.render(
    <Tbody />, 
    document.getElementById('I_want_this_in_React') 
); 

、巣<table>または:

HTML:

もしそうなら、あなたはこのような何かを行うことができます

<table id="lots_of_legacy_knockout"> 
    <tbody>...</tbody> 
    <table id="I_want_this_in_React"></table> 
</table> 

が反応:

const Tbody =() => (
    <tbody> 
     <tr /> 
     <tr /> 
     <tr /> 
    </tbody> 
); 
ReactDOM.render(
    <Tbody />, 
    document.getElementById('I_want_this_in_React') 
); 
+0

うーんを。内容をテーブルから分割する方法はありません。私はあなたが示唆しているように反応コンポーネントをテーブルの外にレンダリングすることが可能かどうか疑問に思います。 –

+0

私はそれが不可能であり、核心の原則に反すると思うでしょう。 Reactがあなたに関連するDOMを管理させます。コンポーネントを別のコンポーネントにレンダリングし、その内容をコピーするためにjQueryを使用するのは客観的に悪いことですが、jQueryがコンポーネントの再レンダリングをどのように行っているのか分からないので、私の助言:あなたのテーブルの部分を切り離すか、「

」全体をReactに持って行きます。これがあなたの質問に答えなかったなら、私に知らせてください。 –

+1

テーブルを別のテーブルにネストすることもできます。 –

関連する問題