2017-11-14 13 views
0

私は反応の良い歴史があります。しかし今日、私は非常に奇妙な問題に直面しました。反応の変化はDOMで見えません

私は値のリストを受け取るハンバーガーを持っていて、私は親からthis.refs.child1.setValues()を通して送信する値の1つが選択されています。このsetValues関数はsetStateを呼び出し、1つの値はreactのパラメータclassNameによって選択されます。

したがって、最初の手順では、20の値の中から最初の値を選択します。

インクルードは、タブが最初のli要素については、これを示して反応する:すべての要素が持っている

className="{something} +class1" 

が残り:

className="{something}" 

結構です。 ( 'class1'はsetstateで動的に追加されるクラスです)、domは選択された最初の値を表示し、残りは選択されていません。

今私は3番目のものを言う別の値を選択すると、問題は第二段階であるので、最初の値が選択解除されるはずですと3が選択されなければならないと予想されるが、第3の値が

className="{something} + class1"、残りそのためにあるべき反応しますclassName="{something}"

反応タブでうまくいきますが、要素タブのli要素はどちらもclass1を持つので選択されていますが、class1は最初に選択されていない3番目の要素のみである必要があります)

+0

ので問題はタブと要素]タブを反応させている(DOM)あなたが使用していない –

+1

classNameのパラメータの同期していない「{}」:あなたはこのような何かをする必要が

{} –

+0

子コンポーネントの適切なコードを投稿すると分かりやすくなります –

答えて

0

リアクションwor仮想DOMを使用してksを変更すると、変更が検出された要素にのみDOMが変更されます。したがって、実際にクラスを最初の要素から削除することは決してないので、それを再レンダリングすることはありません.3番目の要素だけを再レンダリングします。ただ、

removeClass() { 
    let allLinks = document.querySelectorAll('.something'); 
    allLinks.map((link) => link.classList.remove('class1')); 

    //and here just call the function to add the class to the right 
    //element. 
} 
+0

なので、私は値className = {"class1 class2"}を持っていて、次に新しいclassName = {"class1"}になるようにsetStateしますが、DOMは変更されません。 –

+0

@PalashChordia私が意味することは、setStateを使って3番目のリンクに新しいクラスを追加すると、3番目のリンクのみが再レンダリングされるため、クラスを最初のクラスから削除しないということです。だから、最初にすべてのリンクからクラスを削除し、それを正しいクラスに追加しなければなりません。あなたは上で書いた解決策でそれを行うことができます。 –

関連する問題