Reputation: 797
I have a api call that returns data in json format. I would like to retrieve a distinct campus for dropdown list. For example, my json data format is like below:
courses=[{campusname; A, coursename: X, id: 1},
{campusname: A, coursename: Y, id: 2},
{campusname: B, coursename: Z, id: 3}]
But my code below does not return any selections here. I am not sure the Set()
syntax is correct.
App.js:
import React, { Component } from 'react';
import './App.css';
import axios from 'axios';
import CampusName from './CampusName';
class App extends Component {
constructor() {
super();
this.state ={
courses:[]
}
}
componentDidMount(){
axios.get('https://mydomain/myAPIURL')
.then(response=>{
this.setState({courses:response.data});
});
}
_getUniqueCampusName(){
const courses=this.state.courses;
const campusSelection=[...new Set(courses)];
return campusSelection.map(campus=>(<CampusName name={campus.campusname}/>));
}
render() {
const campusName=this._getUniqueCampusName;
return (
<div className="App">
<div className="filter">
<select>
<option>Select a Campus</option>
{campusName}
</select>
</div>
</div>
);
}
}
export default App;
CampusName.js
import React from 'react';
const campusName=props=>{
return(
<option value={props.name}>{props.name}</option>
);
}
export default campusName;
Upvotes: 1
Views: 2300
Reputation: 3433
class App extends React.Component {
constructor() {
super();
this.state = {
courses: [
{ campusname: "A", coursename: "X", id: 1 },
{ campusname: "A", coursename: "Y", id: 2 },
{ campusname: "B", coursename: "Z", id: 3 }
]
};
this._getUniqueCampusName = this._getUniqueCampusName.bind(this);
}
_getUniqueCampusName() {
const courses = this.state.courses;
const campusSelection = [...new Set(courses.map(item => item.campusname))];
//console.log(campusSelection);
return campusSelection.map((campus, index) => (
<option key={index}>{campus}</option>
));
}
render() {
const campusName = this._getUniqueCampusName();
return (
<div className="App">
<div className="filter">
<select>
<option>Select a Campus</option>
{campusName}
</select>
</div>
</div>
);
}
}
ReactDOM.render(
<App />,
document.getElementById('react')
);
<div id="react"></div>
<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>
https://codesandbox.io/s/r4z9z7zjmo
Here is the working example for your problem. There seems to be a mistake while you used Set function in javascript
Upvotes: 2