0
Axiosを使用してAPIからデータを取得し、取得したデータがストアに正常にディスパッチされました。現在、Reactコンポーネントにデータを表示する際にいくつか問題があります。反応コンポーネント内のAPIからデータを表示する方法
私はデータを正常にはconsole.log
にできましたが、データがAPIから完全に取得される前にコンポーネントレンダリングが行われました。以下
データを表示するための成分である:
import React, { Component } from 'react';
import ReactDOM from 'react-dom';
import { connect } from 'react-redux';
import PropTypes from 'prop-types';
import { bindActionCreators } from 'redux';
import HeaderSidebar from './includes/header-navbar';
import AllBooks from './includes/all-books';
import { getAllBooks } from '../../actions/book_actions';
class AdminHome extends Component {
componentDidMount() {
this.props.actions.getAllBooks();
}
renderBooks(){
const allbooks = this.props.books;
return allbooks.map((book) => {
return (<div key={book.id}>
<AllBooks title={book.title}
description={book.description}
/>
</div>)
})
}
render() {
return (
<div >
<HeaderSidebar />
{this.renderBooks()}
})}
})}
</div >
)
}
}
function mapStateToProps(state) {
return {
books: state.book.data
}
}
AdminHome.PropTypes = {
books: PropTypes.object.isRequired
}
function mapDispatchToProps(dispatch) {
return {
actions: bindActionCreators({
getAllBooks
}, dispatch)
};
}
export default connect(mapStateToProps, mapDispatchToProps)(AdminHome);
アクション「../actionsから
export function getAllBooks() {
return dispatch => axios.get(`${API_URL}`)
.then((res) => {
dispatch({
type: GET_ALL_BOOKS,
data: res.data
});
return res.data;
})
.catch(error => error);
}
レデューサー インポート{ADD_BOOK、 GET_ALL_BOOKSを} /タイプ';
const INITIAL_STATE = {};
function bookReducer(state = INITIAL_STATE, action) {
switch (action.type) {
case ADD_BOOK:
return { ...state, message: 'Book added Successfully' };
case GET_ALL_BOOKS:
return { ...state, data: action.data };
default:
return state;
}
}
export default bookReducer;
あなたの質問が減速し、アクションで更新します。[axiosでJSONデータをレンダリング]の –
可能な複製(https://stackoverflow.com/questions/43959676/rendering-json-data-with-axios) –