Реактивный компонент redux-thunk не отображает this.props
Я новичок, чтобы реагировать, и я пытаюсь понять, как сделать асинхронный запрос AJAX. Мне удалось выполнить запрос, и возвращенные данные были добавлены в мое состояние, но я не могу отобразить данные в моем компоненте. Вот мои настройки.
Компонент UserPage
import React, { Component } from 'react';
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
import { getUsers } from '../../actions';
class User extends Component {
displayName: 'User';
componentWillMount() {
this.props.getUsers();
}
renderUsers() {
return this.props.users.map(user => {
return (
<h5>{user.Name}</h5>
);
});
}
render() {
var component;
if (this.props.users) {
component = this.renderUsers()
} else {
component = <h3>asdf</h3>;
}
return (
<div>
{component}
</div>
);
};
};
function mapStateToProps(state) {
return {
users: state.all
};
}
export default connect(mapStateToProps, { getUsers })(User);
действие
import request from '../helpers/request';
import { GET_USERS } from './types';
export function getUsers() {
return request.get(GET_USERS, 'Person/GetPeople');
}
С помощью функции get из модуля request.js
get: function (action, url) {
return (dispatch) => {
axios.get(`${ROOT_URL}${url}`)
.then(({ data }) => {
dispatch({
type: action,
payload: data
});
});
};
}
User_reducer
import { GET_USERS } from '../actions/types';
export default function (state = {}, action) {
switch (action.type) {
case GET_USERS:
console.log(action);
return { ...state, all: action.payload }
default:
return state;
};
}
Когда я загружаю компонент UserPage, я вижу, что запрос выполняется и состояние обновляется в инструменте redux dev, но я не могу отобразить this.props.users.
Если я уберу if(this.props.users) в методе render() компонента User, я получу неопределенное значение для this.props.users.
Что я делаю неправильно?
Любая помощь с благодарностью! Спасибо
РЕШИТЬ
Решением было установить для свойства users значение state.users.all в функции mapStateToProps.
function mapStateToProps(state) {
return {
users: state.users.all
};
}
Спасибо
1 ответ
Не могли бы вы проверить, у вас есть this.renderUsers()
определены в этой функции визуализации? Может быть, вы забыли связать его, и эта функция undefined
?
Попробуй добавить this.renderUsers = this.renderUsers.bind(this);
в вашем конструкторе и посмотрите, поможет ли это.