当前位置: 首页 > 知识库问答 >
问题:

如何使用redux从route参数加载对象

齐凯康
2023-03-14

我用的是Report-router-Redux我有这样的路由

<Route path="/user/:userId" components={{ body: UserMaintenance }} />

在路由中加载与userId参数对应的用户对象的推荐方法是什么?

我的想法(我是新的反应

共有2个答案

湛鸿雪
2023-03-14

我建议您将该逻辑移动到容器组件,该组件将用户维护连接到redux存储

这将帮助您将数据层与不应该知道如何获取数据以进行渲染的表示组件分离。它只需要知道如何呈现这些数据。

import React, {Component, PropTypes} from 'react';
import {connect} from 'react-redux';
import {fetchUser} from './actions';
import UserMaintenance from './UserMaintenance';

class UserContainer extends Component {
  componentWillMount() {
    const {fetchUser, userId} = this.props;
    fetchUser(userId);
  }

  render() {
    return (
      <UserMaintenance {...this.props} />
    );
  }
}

const mapStateToProps = (state, ownProps) => ({
  userId: ownProps.params.userId
  user: state.user,

});

export default connect(
  mapStateToProps, {fetchUser}
)(UserContainer);

假设你有finchUseractionCreator。

我强烈建议您观看由Dan Abramov(Redux的创建者)在https://egghead.io.它是免费的,很好地涵盖了这个主题。

焦博实
2023-03-14

首先,您必须决定是否希望您的URL成为用户ID的真实来源(我建议如此)。

然后您就知道,只要URL/路由发生更改,并且在任何其他时间,您都将调度FETCH\u USER

要从应用程序中的其他位置更改用户,只需浏览历史记录。按下('/user/1234'),知道URL中的更改将触发对存储的更新。

如果你对此感到满意,只需在路线中调度动作:

<Route
  path="/user/:userId"
  components={{ body: UserMaintenance }}
  onEnter={state => {
    store.dispatch({
      type: ACTIONS.FETCH_USER,
      key: state.params.userId,
    });
  }}
/>

如果遵循此逻辑,则可能不需要react router redux

这里是redux作者的有趣评论。

 类似资料:
  • 问题内容: 我正在使用JSON传输数据。 我需要在HTML页面中使用Ajax读取仅在脚本中包含一个JSON对象的文件吗? 我是否也需要jQuery,或者是否可以使用Ajax加载该JSON文件? 在不同的浏览器上是否有所不同? 问题答案: 您不需要任何库,香草javascript中的所有内容均可用,以获取json文件并进行解析:

  • 本文向大家介绍如何使用jQuery加载JSON数据?,包括了如何使用jQuery加载JSON数据?的使用技巧和注意事项,需要的朋友参考一下 要使用jQuery加载JSON数据,请使用和方法。jQuery.getJSON()方法使用GET HTTP请求从服务器加载JSON数据。 这是此方法使用的所有参数的描述- url- 包含请求发送到的URL的字符串 数据 -此可选参数表示将发送到服务器的键/值对

  • 例如,如果我们想使用 或 如何将这两个示例作为参数传递给Lambda函数? 我在文档中看到了一些关于设置“Mapped From”的内容,但我在API网关控制台中找不到该设置。 用于在“方法请求”页中定义的名为的路径参数。 用于在“方法请求”页中定义的名为的查询字符串参数。 尽管我定义了一个查询字符串,但我没有看到这两个选项中的任何一个。

  • 我们在基于sbt的项目中有多个项目(如下所示),并探索如何在运行时从scala对象中获得应用程序jar名称,例如“project1-v1.jar”。 使用“SBT Assembly”为每个项目创建单独的jar。

  • 问题内容: 带有以下源代码: 我可以用: 实例化该类,但我必须将此源文件()放在类路径中 我想从数据库动态加载此类(将源代码存储为或) 这可能吗 ? 问题答案: 假设您已经编译了该类,则可以创建一个,从数据库中加载该类。 如果数据库仅包含源代码,则必须首先对其进行编译-查看Java编译器API,了解如何在没有任何文件的情况下执行此操作。 请注意,只要类加载器处于活动状态,以这种方式加载的类就会保持