私はredux-thunkで遊んでいて、ランダムなAPIからデータを取得しようとしています。私は質問があります: 私のコンソールのスクリーンショットでわかるようにコンソールのロギング時に空の配列を2回取得します。これは本当にうまくいきます。私は何か間違っているようです。空の配列を記録しないように要求を行うにはどうすればいいですか? componentWillMountでデータを要求すると、同じ結果が得られます。redux-thunkを使用してAJAXリクエストで状態を設定する
ストア:
const initialState = {
users: {
isFetching: false,
receivedAt: null,
error: null,
userList: []
}
}
const store = createStore(
rootReducer,
initialState,
applyMiddleware(
thunk,
createLogger()
)
)
リデューサー:
function users(state = {},action) {
switch(action.type) {
case 'REQUEST_USERS':
return {
...state,
isFetching:true
}
case 'RECEIVE_USERS':
return {
...state,
isFetching: false,
receivedAt: action.receivedAt,
userList: action.users
}
case 'REQUEST_ERROR':
return {
...state,
error: action.err
}
default: return state
}
}
const rootReducer = combineReducers({
users
})
ActionCreators:
export function requestUsers() {
return {
type:'REQUEST_USERS'
}
}
function receiveUsers(users) {
return {
type:'RECEIVE_USERS',
users: users.results,
receivedAt: Date.now()
}
}
function requestError(err) {
return {
type:'REQUEST_ERROR',
err
}
}
export function loadUsers() {
return dispatch => {
dispatch(requestUsers())
return fetch('https://randomuser.me/api/?results=50')
.then(response => response.json())
.then(users => dispatch(receiveUsers(users)))
.catch(err => dispatch(requestError(err)))
}
}
コンテナのコード:
function mapStateToProps (state) {
return {
users: state.users
}
}
function mapDispatchToProps (dispatch) {
return bindActionCreators(actionCreators, dispatch)
}
const App = connect(mapStateToProps, mapDispatchToProps)(Main)
私のコンポーネントのコード:
componentDidMount() {
this.props.loadUsers()
}
render() {
const {userList} = this.props.users
console.log(userList)
const users = userList.map((user,i) => <li key={i}>{user.name.first + ' ' + user.name.last}</li>)
return (
<div>
<ul>
{users}
</ul>
</div>
)
}
}
コード(レデューサー、店舗への接続方法など)を見ずに言うのは本当に難しいです。 コードをインデントしてください。私には頭痛があります。 – thedude
投稿に追加されました。私はストアに接続して、接続(mapStatetoProps、mapDispatchToProps)を使用して – Umbrella
Sry、私はここでコードをインデントする方法を取得しない、それはすべて私はそれを貼り付けインデントを失う。 – Umbrella