私は次のコードを持っています:
export class Highlights extends React.Component {
render() {
return (
<div>
{JSON.stringify(this.props.highlights_data.data)}
</div>
)
}
}
これにより、次が出力されます。
{"active":{"label": "Active"、 "value": "12"}、 "automatic":{"label": "Automatic"、 "value": "8"}、 "waiting":{ "label": "Waiting"、 "value": "1"}、 "manual":{"label": "Manual"、 "value": "3"}}
highlights_data.data
プロップを反復処理して、label
およびvalue
を渡す別のコンポーネントを呼び出すにはどうすればよいですか?
@Danの回答を除いて、他の回答はJSONオブジェクトを反復処理しないため、あなたにとって有用/有用であるとは思いません。
これを適切に行うには、JSONオブジェクトの各キーを反復処理する必要があります。これを行う方法はいくつかありますが、そのうちの1つはObject.keys()
を使用する方法です。以下のコードスニペットのように。
このソリューションは、JSONオブジェクト内の各キーを反復処理し、配列にプッシュします。その配列を取得したら、通常どおりmap()
で繰り返し処理し、関連する小道具を別の子コンポーネントに渡すことができます。
class MyApp extends React.Component {
render() {
var json = {"active":{"label":"Active","value":"12"},"automatic":{"label":"Automatic","value":"8"},"waiting":{"label":"Waiting","value":"1"},"manual":{"label":"Manual","value":"3"}};
var arr = [];
Object.keys(json).forEach(function(key) {
arr.Push(json[key]);
});
return <ul>{arr.map(item => <MyAppChild key={item.label} label={item.label} value={item.value} />)}</ul>;
}
}
class MyAppChild extends React.Component {
render() {
return <li>{this.props.label + " - " + this.props.value}</li>;
}
}
ReactDOM.render(<MyApp />, document.getElementById('myapp'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="myapp"></div>
export class Highlights extends React.Component {
render() {
const { data } = this.props.highlights_data;
return (
<div>
{
Object.keys(data).map((e, i) => {
<SomeComponent key={i} {...e} />
});
}
</div>
)
}
}
<div>
{this.props.highlights_data.data.map((e, i) =>
<SomeComponent key={i} label={e.label} value={e.value} />
)}
</div>
アイテム自体を送信するだけです。
<SomeComponent key={i} item={e} />
そして、props.item.label
またはprops.item.value
を使用して、子のlabel
およびvalue
にアクセスします。
var Highlight = React.createClass({
render: function() {
const {value, label} = this.props;
return <div>{label}: {value}</div>;
}
});
var Highlights = React.createClass({
render: function() {
const {active, automatic, waiting, manual} = this.props.highlights_data.data;
return (
<div>
<Highlight {...active} />
<Highlight {...automatic} />
<Highlight {...waiting} />
<Highlight {...manual} />
</div>
);
}
});
const data = {data:{"active":{"label":"Active","value":"12"},"automatic":{"label":"Automatic","value":"8"},"waiting":{"label":"Waiting","value":"1"},"manual":{"label":"Manual","value":"3"}}};
ReactDOM.render(
<Highlights highlights_data={data} />,
document.getElementById('container')
);