Как получитьById в Redux - PullRequest
0 голосов
/ 29 января 2019

Я новичок в реагировании и редукции, пытаюсь получить данные с помощью API, но, к сожалению, пытаюсь выбрать по идентификатору, id не определен в логере с избыточностью и не возвращает результат со стороны сервера,

Здесьмой код

Мой маршрут <Route path="/admin/:id" component={AdminPage} />

Действие

function getAll(id){
    return dispatch =>{
        dispatch(request(id));

        adminService.getAll(id)
        .then( admin => {

            dispatch(success(admin));
            dispatch(alertActions.success('Welcome Back !'));

        },error => {

            dispatch(failure(error.toString()));
            dispatch(alertActions.error(error.toString()));

        });

    };

    function request(id)    { return { type: adminConstants.GETALL_REQUEST, id } }
    function success(admin) { return { type: adminConstants.GETALL_SUCCESS, admin } }
    function failure(error) { return { type: adminConstants.GETALL_FAILURE, error } }

Редуктор

export function admin( state={}, action){
    switch(action.type){

        case adminConstants.GETALL_REQUEST:
        return { loading: true, id : action.id };

        case adminConstants.GETALL_SUCCESS:
        return { items: action.admin };

        case adminConstants.GETALL_FAILURE:
        return { error: action.error };

        default:
        return state
    }
}

Сервис

function getAll(id){

    const requestOptions = {
        method : 'GET',
        headers: authHeader()
    };
    return fetch(`${apiUrl}/admin/${id}`, requestOptions).then(handleResponse)
    .then( data => {  return data; });
}

AdminPage

class AdminPage extends React.Component{



    componentDidMount(){
        this.props.dispatch(adminActions.getAll());
    }

    render(){
        const { admin } = this.props;
        return(
            <div>

                <h3> Admin Panel</h3>

                {admin.items &&
                    <ul>
                        {admin.items.map((data, index) =>
                            <li key={data.id}>
                             email id : {data.email},
                             end date : {data.dateEnd},
                             customerId : {data.customerId}

                            </li>
                        )}
                    </ul>
                }


            </div>
            );
    }
}




function mapStateToProps(state) {

    const { admin } = state;

    return { admin};
}


const connectedAdminPage = connect(mapStateToProps)(AdminPage);
export { connectedAdminPage as AdminPage };

Ссылка на главную страницу

<Link to="/admin/5c4f69d5259f7d14434b4cb6">Admin</Link>

1 Ответ

0 голосов
/ 29 января 2019

Если вы пытаетесь получить 'id' в

Route path = "/ admin /: id">

, попробуйте

console.log("mark1",this.props.match.params.id) 

внутри компонента AdminPage.Если он работает, вы можете передать его диспетчеру через компонент и использовать внутри своей функции.

Для получения дополнительной документации попробуйте https://reacttraining.com/react-router/web/example/url-params.

Если это не то, что вы просили, прокомментируйте ниже иЯ буду редактировать соответственно.:)

Редактировать: Итак, вот решение для 'AdminPage'

class AdminPage extends React.Component{



    componentDidMount(){
        this.props.dispatch(adminActions.getAll(this.props.match.params.id));
    }
...
}

Теперь оно не должно быть неопределенным в действии, можете подтвердить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...