私はJSONを解析しているreduxコンポーネントを持っていますが、ネストされた子オブジェクトを取得する方法はわかりません。私はmapStateToPropsの動作を正しく理解しているとは思わない。React/Redux mapStateToProps with nested JSON
コンソールログは、子オブジェクトをダンプしているが、私はservices.nameにアクセスしようとしたとき、私は
"Cannot read property 'name' of undefined"
を取得し、誰かが私がここでプロパティをマップする方法を理解するのに役立つことはできますか? APIの一番下にあるJSONの例を紹介しました。
サービス-list.js
import React, { Component } from 'react';
import { connect } from 'react-redux';
import * as actions from '../actions';
class ServicesList extends Component {
componentDidMount(){
this.props.fetchServices();
}
render() {
//console.log('render called in ServicesList component');
return (
<table className='table table-hover'>
<thead>
<tr>
<th>Service Name</th>
</tr>
</thead>
<tbody>
{this.props.services.map(this.renderServices)}
</tbody>
</table>
);
}
renderServices(data) {
console.log(data.services);
const name = data.services.name;
return(
<tr key={name}>
<td>{name}</td>
</tr>
);
}
}
function mapStateToProps({services}) {
return { services };
}
export default connect(mapStateToProps, actions)(ServicesList);
私のJSONは、次のようになります。
{
"services": [
{
"name": "redemption-service",
"versions": {
"desired": "20170922_145033",
"deployed": "20170922_145033"
},
"version": "20170922_145033"
}, {
"name": "client-service",
"versions": {
"desired": "20170608_094954",
"deployed": "20170608_094954"
},
"version": "20170608_094954"
}, {
"name": "content-rules-service",
"versions": {
"desired": "20170922_130454",
"deployed": "20170922_130454"
},
"version": "20170922_130454"
}
]
}
は最後に、私はここaxios.getを公開する作用を有する:
import axios from 'axios';
const ROOT_URL=`http://localhost:8080/services.json`;
export const FETCH_SERVICES = 'FETCH_SERVICES';
export function fetchServices(){
const url = `${ROOT_URL}`;
const request = axios.get(url);
return{
type: FETCH_SERVICES,
payload: request
};
}
あなた 'constの名前= data.services.name;' 'constの名前= data.nameでなければなりません;' – Panther
、あなたはbcoz services' 'の上にマッピングし、それぞれにされていますループすると、 'renderServices'関数内に単一の' service'が得られます。 – Panther
これは、renderServicesを1回だけ呼び出しています。私が理解できないことは、名前が付けられていないときに次のオブジェクトをどのようにマップするかです。 –