私がしようとしているのは、製品リストを作成し、製品が入ったときにそれを継続的に表示することです。このため私はキーを使っています(製品を区別するために)。 React documentationから、我々はことを知っている:ReactJSのキーを使ってリストから項目を表示する正しい方法はありますか?
A "key" is a special string attribute you need to include when creating lists of elements.
私は製品を表示するテーブルを持って、それぞれの製品には、説明、価格と数量(リスト上の製品のようなものの量)IDを持っています。新しい製品がリストに追加されるたびに、最後に表示された後に製品を表示する必要がありますが、製品が既にリストにある場合は、新しい値を表示するようにオブジェクトデータを変更する必要があります。例:例えば、コーヒーは、それは次のように表示されます追加され、
ので------------------------------------
| Description | Price | Quantity |
------------------------------------
| Milk | $2.49 | 1 |
------------------------------------
、:
------------------------------------
| Description | Price | Quantity |
------------------------------------
| Milk | $2.49 | 1 |
------------------------------------
| Coffee | $1.25 | 1 |
------------------------------------
しかし、別の牛乳が追加された場合、値は次のようになります。
------------------------------------
| Description | Price | Quantity |
------------------------------------
| Milk | $4.98 | 2 |
------------------------------------
| Coffee | $1.25 | 1 |
------------------------------------
これまでのところ、ES5を使用して私はこのようなテーブルクラスを持っています(これはレンダリング関数です):
return (
<div className="data">
<div className="col-md-6">
<table id="table" className="table">
<thead>
<th>Description</th>
<th>Price</th>
<th>Quantity</th>
</thead>
<tbody>
{<Product key={key} description={description} price={price} quantity={quantity} />}
</tbody>
</table>
</div>
<div className="col-md-6 col-centered">
<div className="row"><Total key={total} total={total} /></div>
<div className="row">
<button href="#" className="btn btn-default btn-lg">Pagar</button>
</div>
</div>
</div>
);
合計は、関連性がなく、動作しており、テーブルに変更はありません。製品をレンダリングするには、ここにクラスです。今のところ、それはリストに入ったときに、各項目を上書きしているんリアクト何
var Product = React.createClass({
propTypes: {
quantity: React.PropTypes.number.isRequired,
description: React.PropTypes.string.isRequired,
producttotal: React.PropTypes.number.isRequired
},
getInitialState: function() {
return{
quantity: this.props.quantity,
description: this.props.description,
producttotal: this.props.producttotal
};
},
render: function() {
return (
<tr>
<td>{this.props.quantity}</td>
<td>{this.props.description}</td>
<td>{this.props.producttotal}</td>
</tr>
)
}
});
。あなたが見ることができるようにProduct
(つまり、製品IDです)キーを取得しますが、React documentationは言うです:
Keys help React identify which items have changed, are added, or are removed. Keys should be given to the elements inside the array to give the elements a stable identity.
私はprops
を使用する場合に発生しますが、例えば、私はdescription
、price
とquantity
の状態を変更した場合だから、
Warning: flattenChildren(...): Encountered two children with the same key. Child keys must be unique; when two children share a key, only the first child will be used.
、ReactJSのキーを使用して、リストから項目を表示するための正しい方法は次のとおりです。this.setState
とProduct
に、私はこの警告を取得しますか?私はReactのドキュメントやフォーラムで多くの助けを得ることができませんでした。途中でありがとう。
申し訳ありませんが、Total要素がここでは関連していないことを説明する質問を編集しました。ところで、あなたのスニペットにエラーが表示されます: '{ " message ":" SyntaxError:インポート宣言はモジュールのトップレベルにしか表示されません "、 " filename ":" http://stacksnippets.net/js "、 "lineno":13、 "colno":8 } –
ああ、残念です。私はそれが実行可能であることを意味しませんでした。まだStackExchangeに精通していません。私はそれをどのように取り出すかを考え出すでしょう。 – rob2d
(BabelのようなES6をサポートするコンパイラやGoogle Chromeでうまく動作するはずです) – rob2d