2017-11-18 9 views
0

私はコンポーネントと比較したい場合は、私がレンダリングされたコンポーネントにtoJSONせずにそれを呼び出す場合は、エラーがあるHTMLの段落に\ nを改行してテキストを変換コンポーネント私たちはなぜ必要なのですか?

Text.js

const Text = props => ((
    <div> 
    { props.paragraph.split('\n').map((line, index) => { 
     if (line.length === 0) return; 
     return <p key={index}>{ line }</p>; 
    })} 
    </div> 
) 
); 

を書きます。 (私はtoMatchSnapshotに確認するとき、結果が同じであっても())

Text.spec.js

it('ignores \\n at last',() => { 
    const paragraphA = 'aa\nbbb\n'; 
    const paragraphB = 'aa\nbbb'; 
    const cA = renderer.create(<Text paragraph={paragraphA} />); 
    const cB = renderer.create(<Text paragraph={paragraphB} />); 
    expect(cA).toEqual(cB); // NG 
    expect(cA.toJSON()).toEqual(cB.toJSON()); // OK 
}); 

冗談は

比較値が同じ構造にシリアライズ以下のような違いを伝えます。 代わりにtoJSONを呼び出さずに内部オブジェクト構造を印刷する。

私はそれをグーグルが、私たちがここでtoJSONを必要としないのはなぜtoJSON

  • についての手掛かりを見つけることができませんでしたか?
  • 何をtoJSON一般的にしていますか?
  • toJSONについての参考情報はどこにありますか?

のEnv

が反応:16.1 冗談-CLI ": "事前に^ 21.2.1"

感謝を!!

答えて

1

fine manualから:

toJSONの動作

文字列化されるオブジェクトにtoJSONという名前のプロパティがあり、その値が関数である場合、toJSONメソッドはJSON文字列化の動作をカスタマイズします:オブジェクトのシリアル化ではなく、toJSONメソッドから返された値がシリアル化されます。

例:私はあなたがcA.toJSONを(比較すべきだと思う

//without toJSON 
 
const a = { 
 
    b: 1 
 
}; 
 
console.log(
 
    JSON.stringify(a) 
 
);

//with toJSON 
 
const a = { 
 
    b: 1, 
 
    toJSON:() => ({ 
 
    c: 100 
 
    }) 
 
}; 
 
console.log(
 
    JSON.stringify(a) 
 
);

)の代わりに、生の機能の cA.toJSON

なぜ必要なのですか?オブジェクト(配列や関数を含む)を比較すると、値の代わりに参照によって比較されます。反応成分は複雑な構造(例えば、別のコンポーネントへの参照をプロパティとして扱う)ので、安全オブジェクトを返す.toJSON()の代わりに文字列化しようとするとエラーが発生します。例えば、.toJSONメソッドをチェックしないJSONを解析するためのカスタム関数を持っていると、うまくいきません。

+0

詳細なコメントありがとうございます! まだ必要かどうかわかりません。しかし、toJSONなしでエラーが発生しました。 > - "_debugID":17、 > + "_debugID":9、 このため、私は2つのコンポーネントを比較することはできません。 その後、私はドキュメントを嫌いにします。ほとんどの場合、toSON()メソッドを呼び出してテストのためのコンポーネントをレンダリングします。だから私はこれが私の問題を解決できると思っていましたが、実際それは解決のようです。 「npmテスト」でエラーが見つかりませんでした この考え方について誤解がある場合は教えてください。 –

+0

@KanUchidaはい、そうです。ジャスミンテストはオブジェクトで動作しますが、参照などでは機能しません。同じ構造を持っていても(しかし、メモリ内の他の場所に割り当てられていても)関数に渡されます。 Reactコンポーネントの.toJSON()メソッドを呼び出すと、これらの参照がなくても安全なオブジェクトリテラルを取得できます。 – reski

+0

私はそれを得ました!ありがとう!私は深くあなたのおかげで理解しています:D –

関連する問題