@lacront

Возможно ли получить элемент массива из состояния redux, используя mapStateToProps?

Необходимо получить один из элементов состояния, хранящегося в redux, по параметру роутера. В данный момент написал следующее:
class CoinDetails extends React.Component {

  getCoinsDetails = () => {
    const coinSymbol = this.props.match.params.id;
    return this.props.coins.data.find(item => item.symbol === coinSymbol);
  }

  render(){
    const coin = this.getCoinsDetails();
    return (
      <div>
        {coin.name}
      </div>
    )
  }
}

const mapStateToProps = store => {
  return {
    coins: store.coins,
  }
}

export default connect(mapStateToProps)(CoinDetails);


В vue + vuex подобное легко реализуется с помощью getters.
Описанный выше способ работает, но кажется мне не совсем правильным, потому что вытаскивать в props почти весь state redux не требуется. Хочется задействовать функцию getCoinsDetails непосредственно в mapStateToProps, но это невозможно. Есть ли какой-нибудь способ, который поможет выйти из этой ситуации?
  • Вопрос задан
  • 248 просмотров
Решения вопроса 1
rockon404
@rockon404 Куратор тега React
Frontend Developer
const coinSelector = (state, ownProps) =>
  state.coins.data.find(coin => coin.symbol === ownProps.match.params.id);

const mapStateToProps = (state, ownProps) => ({
  coin: coinSelector(state, ownProps),
});
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы