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

IT技术 javascript reactjs flux redux
2021-05-24 15:23:31

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

假设我在 React 中有一个页面可以从链接中获取props。

const id = this.props.params.id;

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

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

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

先感谢您。

2个回答

当您将组件连接到 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关键字