У меня проблема с реализацией данных API в ListView. Я получил JSON с помощью Axios.
export function fetchRateService() {
return function(dispatch) {
axios.get(RATE_URL)
.then(response => {
dispatch({
type: FETCH_RATE_SERVICE,
payload: response.data
});
})
.catch((error) => {
console.log(error);
})
}
}
Редуктор. Я добавил данные о ставках в массив
import {
FETCH_RATE_SERVICE
} from '../actions/types';
const INITIAL_STATE = {
base: '',
date: '',
rates: []
};
export default (state = INITIAL_STATE, action) => {
switch (action.type) {
case FETCH_RATE_SERVICE:
return {
...state,
base: action.payload.base,
date: action.payload.date,
rates: [ ...state.rates, action.payload.rates ]
};
default:
return state;
}
};
Это компонент
class ConturyList extends Component {
componentWillMount() {
this.props.fetchRateService();
this.createDataSource(this.props);
}
createDataSource({rates}) {
const ds = new ListView.DataSource({
rowHasChanged: (r1, r2) => r1 !== r2
});
this.dataSource = ds.cloneWithRows(rates);
}
renderRow(rate) {
return <ListItem rate={rate} />
};
render() {
console.log(this.props);
const { CardSectionStyle, textStyle, containerStyle } = styles;
const { visible, closeModal } = this.props;
return (
<Modal
visible={visible}
transparent={false}
animationType="slide"
onRequestClose={() => {this.props.closeModal()}}
>
<ListView
enableEmptySections
dataSource={this.dataSource}
renderRow={this.renderRow}
/>
</Modal>
);
}
}
const mapStateToProps = state => {
return {
rates: state.rateService.rates,
date: state.rateService.date,
base: state.rateService.base
};
}
export default connect(mapStateToProps, { fetchRateService } )(ConturyList);
Проблема в том, что я могу видеть данные реквизита, используя console.log(this.props); введите здесь описание изображения Я потратил более 3 дней, чтобы понять, почему это так не работает. Я пытался добавить map() к renderRow(rate) {
return rate.map((data) => {
return <ListItem rate={data} />
};
, но это не сработало. Весь внутренний код находится в одном объекте. Нужно ли разделять данные запятыми? Ценю, что вы помогаете. Спасибо
ОБНОВЛЕНИЕ Поэтому я пытаюсь реализовать FlatList вместо использования ListView. Проблема в данных JSON. введите здесь описание изображения. Я хочу внедрить ключ CountryCurrencyCode (AUD, JPN и т. д.) в FlatList. Так как ставки — это объект внутри объекта, я добавил объект ставки в массив (редуктор). Но this.props.rates[0]
нельзя реализовать в свойстве данных FlatList. Какой метод я могу попробовать? Я ничего не могу придумать. Я мог бы распечатать ключ, используя map(), когда ставки являются объектом, а затем я не могу реализовать его в FlatList.