Реактивный компонент 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); в вашем конструкторе и посмотрите, поможет ли это.

Другие вопросы по тегам