Javascript Redux - 如何通过 id 从商店获取元素

Javascript Redux - how to get an element from store by id

在过去的几周里,我一直在努力学习 React 和 Redux。 现在我遇到了一个问题,但我还没有找到正确的答案。

假设我在 React 中有一个页面从 link 获取道具。

const id = this.props.params.id;

现在在此页面上,我想显示一个来自 STORE 的具有此 ID 的对象。

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

我的问题是: 从 STORE 查询对象的函数应该在页面文件中,在 render 方法之前,还是应该使用 action creators 并将该函数包含在 reducer 中。 我注意到 reduceres 似乎只包含对商店有影响的动作,但我的只是查询商店。

提前致谢。

当您将组件连接到 redux 时,您可以使用 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 函数接受整个 redux 状态和组件的 props,从中你可以决定将什么作为 props 发送到你的组件。因此,根据我们所有的项目,寻找 ID 与我们的 URL.

匹配的项目

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

import _ from 'lodash'; const mapStateToProps = (state, ownProps) => ({ item: _.find(state.data, (e) => e.product_id == ownProps.match.params.productID) });

这里product_id是API中的标签,productID是我在react-router中给的参数。

注意:不要忘记 match 关键字