Javascript Redux - 如何通过id

时间:2016-01-17 17:01:00

标签: javascript reactjs flux redux

在过去的几周里,我一直在努力学习React和Redux。 现在我遇到了一个问题,因为我找不到合适的答案。

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

const id = this.props.params.id;

现在,在此页面上,我想使用此ID显示STORE中的对象。

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

我的问题是: 应该是从STORE查询对象的函数是在页面文件中,在render方法之前,还是应该使用action creators并在reducers中包含该函数。 我注意到redures似乎只包含在商店中存在impoact的操作,但我只是查询商店。

提前谢谢。

2 个答案:

答案 0 :(得分:15)

将组件连接到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状态和组件的道具,从中你可以决定将什么作为道具发送到组件。因此,考虑到我们所有的项目,请查找ID与我们的URL匹配的项目。

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

答案 1 :(得分:0)

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关键字