Javascript Redux - как получить элемент из хранилища по id

В течение последних недель я пытался узнать React и Redux. Теперь я столкнулся с проблемой, я не нашел правильного ответа.

Предположим, у меня есть страница в React, которая получает реквизиты из ссылки.

const id = this.props.params.id;

Теперь на этой странице я хотел бы отобразить объект из STORE с этим идентификатором.

 const initialState = [
      {
        title: 'Goal',
        author: 'admin',
        id: 0
      },
      {
        title: 'Goal vol2',
        author: 'admin',
        id: 1
      }
    ]

Мой вопрос: если функция запроса объекта из хранилища должна быть в файле страницы, перед методом рендеринга или я должен использовать создателей действий и включить функцию в редукторы. Я заметил, что редукторы, как представляется, содержат только действия, которые имеют impoact на магазине, но мой просто запрашивает хранилище.

Спасибо заранее.

Ответ 1

Вы можете использовать функцию mapStateToProps для запроса хранилища при подключении компонента к сокращению:

import React from 'react';
import { connect } from 'react-redux';
import _ from 'lodash';

const Foo = ({ item }) => <div>{JSON.stringify(item)}</div>;

const mapStateToProps = (state, ownProps) => ({
  item: _.find(state, 'id', ownProps.params.id)
});

export default connect(mapStateToProps)(Foo);

(В этом примере используется lodash - _)

Функция mapStateToProps принимает все состояние редукции и реквизиты вашего компонента, и из этого вы можете решить, что отправить в качестве реквизита для своего компонента. Поэтому, учитывая все наши элементы, найдите тот, у которого идентификатор совпадает с нашим URL.

https://github.com/rackt/react-redux/blob/master/docs/api.md#arguments