Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >redux中间件如何将数据添加到存储区?

redux中间件如何将数据添加到存储区?
EN

Stack Overflow用户
提问于 2016-11-03 13:14:26
回答 3查看 1.5K关注 0票数 0

背景

我正在创建一个通用的redux应用程序和redux路由器。我拥有大多数的应用程序设置,包括服务器端呈现和基本的redux操作(修改存储中的布尔值)。现在,我想调用一些api来获取我的应用程序的数据。

目前执行情况

我认为使用redux中间件是个好主意,但我无法将数据添加到存储中。我跟踪了文档并创建了一个类似于此的操作。

example-action.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { CALL_API } from `redux-api-middleware`;


export function fn_get_data () {
  [CALL_API]: {
    endpoint: 'http://www.example.com/api/users',
    method: 'GET',
    types: ['REQUEST', 'SUCCESS', 'FAILURE']
  }
}

我在页面中单击一个按钮运行此操作。我看到行动被解雇了,但商店里什么也没有。我甚至为SUCCESS操作添加了一些自定义代码,并且能够console.log()响应,但仍然无法将数据输入存储区。

此外,我还按照文档所述的方式向商店添加了中间件。

configureStore.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { createStore, applyMiddleware, combineReducers } from 'redux';
import { apiMiddleware } from 'redux-api-middleware';
import reducers from './reducers';

const reducer = combineReducers(reducers);
const createStoreWithMiddleware = applyMiddleware(apiMiddleware)(createStore);

export default function configureStore(initialState) {
  return createStoreWithMiddleware(reducer, initialState);
}

到目前为止

到目前为止,我已经尝试了一系列不同的操作,比如将操作转换为可导出的符号,并在还原器中调用它们,并尝试将数据合并到来自redux中间件中的payload属性的当前状态,但没有成功。

问题

我真的有两个问题

  • 为什么文档中没有减缩器,这只是被忽略了,还是响应中的数据直接进入了存储区?
  • 为什么我调用的数据不被添加到商店(我丢失了什么)?

对此问题的任何帮助、解释或建设性的批评都是非常感谢的,谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-11-04 01:14:24

解决方案

正如markerikson所说,库只为您提供工具,您仍然需要编写还原剂来响应操作。在我的例子中,我终于得到了以下减速器的数据。

example-reducer.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import * as ExampleActionType from "../action/example-action";
import Immutable from "immutable";

let defaultState = Immutable.fromJS({
  fakeData: {}
});

function exampleState (state = defaultState, action) {
  switch (action.type) {

    case ExampleActionType.REQUEST : {
        console.log(action);
        return state;
    }

    case ExampleActionType.SUCCESS : {
        console.log(action);
        return state.merge({fakeData: action.payload });
    }

    case ExampleActionType.FAILURE : {
        console.log(action);
        return state;
    }

    default:
        return state;
  }
}

我还得导出像这样的符号

example-action.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export const REQUEST = Symbol('REQUEST');
export const SUCCESS = Symbol('SUCCESS');
export const FAILURE = Symbol('FAILURE');

结论

非常棒的库,它为您提供了创建api请求所需的所有工具,只需很少的代码。希望这能帮助像我一样对这件事感到困惑的人。

票数 2
EN

Stack Overflow用户

发布于 2016-11-03 13:18:25

据我所见,redux-api-middleware提供了一堆用于进行API调用、分发成功/失败操作以及可能处理一些响应的工具。然而,你在减速机中如何处理这些动作取决于你自己。因此,如果您要求中间件分派"MY_REQUEST_SUCCESS",则需要在还原器逻辑中添加一个"MY_REQUEST_SUCCESS"处理程序,并适当地更新状态。

票数 2
EN

Stack Overflow用户

发布于 2018-08-10 09:12:46

redux-api-middleware不打算将数据存储到存储区(这就是不需要设置任何减缩器的原因)。实际上,我构建了一个库redux-缓存-api-中间件,它在redux-api-middleware之上充当一个瘦层,并添加了缓存(可以很容易地用作一个简单的存储)功能。

下面是一个示例组件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import React from 'react';
import PropTypes from 'prop-types';
import { connect } from 'react-redux';
import api from 'redux-cached-api-middleware';
import Items from './Items';
import Error from './Error';

class ExampleApp extends React.Component {
  componentDidMount() {
    this.props.fetchData();
  }

  render() {
    const { result } = this.props;
    if (!result) return null;
    if (result.fetching) return <div>Loading...</div>;
    if (result.error) return <Error data={result.errorPayload} />;
    if (result.successPayload) return <Items data={result.successPayload} />;
    return <div>No items</div>;
  }
}

ExampleApp.propTypes = {
  fetchData: PropTypes.func.isRequired,
  result: PropTypes.shape({}),
};

const CACHE_KEY = 'GET/items';

const enhance = connect(
  state => ({
    result: api.selectors.getResult(state, CACHE_KEY),
  }),
  dispatch => ({
    fetchData() {
      return dispatch(
        api.actions.invoke({
          method: 'GET',
          headers: { Accept: 'application/json' },
          endpoint: 'https://my-api.com/items/',
          cache: {
            key: CACHE_KEY,
            strategy: api.cache
              .get(api.constants.CACHE_TYPES.TTL_SUCCESS)
              .buildStrategy({ ttl: 10 * 60 * 1000 }), // 10 minutes
          },
        })
      );
    },
  })
);

export default enhance(ExampleApp);

这项工作以缓存的方式进行,但您可以轻松地传递自定义的shouldFetch函数,并且您将始终从API中重新获取:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const enhance = connect(
  state => ({
    result: api.selectors.getResult(state, CACHE_KEY),
  }),
  dispatch => ({
    fetchData() {
      return dispatch(
        api.actions.invoke({
          method: 'GET',
          headers: { Accept: 'application/json' },
          endpoint: 'https://my-api.com/items/',
          cache: {
            key: CACHE_KEY,
            shouldFetch: () => true
          },
        })
      );
    },
  })
);

设置如下(注意api还原器,它实际上处理对redux状态的存储响应):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { createStore, combineReducers, applyMiddleware } from 'redux';
import thunk from 'redux-thunk';
import { apiMiddleware } from 'redux-api-middleware';
import api from 'redux-cached-api-middleware';
import reducers from './reducers';

const store = createStore(
  combineReducers({
    ...reducers,
    [api.constants.NAME]: api.reducer,
  }),
  applyMiddleware(thunk, apiMiddleware)
);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40411348

复制
相关文章
PS选区复制_ps怎么取消选区
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/168103.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/20
1.9K0
GPUImage详细解析(九)图像的输入输出和滤镜通道
前言 GPUImage系列解析已经接近尾声,这次介绍的是: 纹理输入输出GPUImageTextureOutput 和 GPUImageTextureOutput 二进制数据输入输出GPUImageRawDataInput 和 GPUImageRawDataOutput 滤镜通道GPUImageFilterPipeline demo用来展示如何使用GPUImageRawDataOutput。 概念介绍 1、GPUImageTextureOutput GPUImageTextureOutput类实现GP
落影
2018/04/27
2.3K0
GPUImage详细解析(九)图像的输入输出和滤镜通道
DataGridView输出或保存为Excel文件(支持超过65536行多Sheet输出)
/// <summary>         /// DataGridView控件数据导出到Excel,可设定每一个Sheet的行数         /// 建立多个工作表来装载更多的数据         /// </summary>         /// <param name="ExportGrid">DataGridView控件</param>         /// <param name="fullFileName">保存的文件路径</param>         /// <param name=
跟着阿笨一起玩NET
2018/09/18
1.5K0
Crimm Imageshop 2.3。
本文介绍了一款名为 Crimm 的图像处理软件,该软件具有体积小、功能丰富、使用方便等特点。它支持多种图像格式,并提供了丰富的图像处理功能,包括图像编辑、调整、滤镜和特效等。此外,该软件还提供了选区、图层、历史记录、颜色、笔刷等实用功能,能够满足用户对图像处理的基本需求。同时,该软件还具备跨平台、免费、开源等特点,是一款非常实用的图像处理工具。
用户1138785
2018/01/03
1.1K0
Crimm Imageshop 2.3。
创建选区快捷键是什么_Photoshop选区操作的快捷键
按住shift用绘画工具在画面点击就可以在每两点间画出直线,按住鼠标拖动便可画出水平或垂直线。
全栈程序员站长
2022/07/02
5450
linux如何将输出重定向到文件和标准输出
调用ls -al > rumenz.txt会将来自该命令的任何输出重定向到指定的文件,有没有办法将输出重定向到文件并将其显示在标准输出上? > ls -al > rumenz.txt 上面的命令执行后,数据被输入到rumenz.txt文件,屏幕没有任何输出,如果既想输入到文件又想输入到屏幕,请使用如下的方法. 使用tee 如果您只关心标准输出 > ls -al | tee rumenz.txt 如果要包含 stderr,请执行以下操作,会覆盖之前的数据 > ls -al 2>&1 | tee rumen
入门笔记
2022/06/02
5.4K0
linux如何将输出重定向到文件和标准输出
原文链接:https://rumenz.com/rumenbiji/linux-file-stdin-stdout.html
入门笔记
2021/11/26
5.1K0
如何将组态软件画面自动截屏并保存为图片
上周有个朋友突然给我发信息,说他们领导让他实现一个功能:将正在运行的SE画面自动按时间截屏并以图片方式保存到指定目录下。
剑指工控
2021/11/09
1.1K0
photoshop 选区操作介绍
上一篇photoshop 选框和套索工具中介绍了如何使用工具抠图,但是只是简单介绍了下单个工具的使用,还没有讲到如何混合使用。
Devops海洋的渔夫
2019/05/31
7560
ps关闭选区替代字
2023/10/18
5240
ps关闭选区替代字
将cmd中命令输出保存为TXT文本文件
例如:将Ping命令的加长包输出到D盘的ping.txt文本文件。 1、在D:目录下创建文本文件ping.txt(这步可以省略,偶尔提示无法创建文件时需要) 2、在提示符下输入ping www.idoo.org.ru -t > D:ping.txt 3、这时候发现D盘下面的ping.txt里面已经记录了所有的信息 备注: 只用“>”是覆盖现有的结果,每一个命令结果会覆盖现有的txt文件,如果要保存很多命令结果的话,就需要建立不同文件名的txt文件。 那么有没有在一个更好的办法只用一个txt文件呢?答案是肯定的,要在同一个txt文件里面追加cmd命令结果,就要用“>>”替换“>” 就可以了.
Hongten
2018/09/13
4.4K0
将cmd中命令输出保存为TXT文本文件
SPPnet
论文: Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition. 来源:ECCV 2014
全栈程序员站长
2022/08/10
1980
SPPnet
Dicom图像解析
后缀: .dcm、.DCM Dicom中规定的坐标系是以人坐标系为绝对坐标系的,规定X轴正向指向病人的左侧,Y轴正向指向病人的背部,Z轴正向指向病人的头部。但是,坐标点的位置,每个厂商都有自己的看法 下图展示了成像过程中对应的坐标系 成像坐标系
范中豪
2019/09/10
1.9K0
Dicom图像解析
Advanced CNN Architectures(R-CNN系列)
除了将该图像标记为猫外,还需要定位图中的猫,典型方法是在该猫周围画一个边界框,这个方框可以看做定义该方框的一系列坐标,(x,y) 可以是方框的中心w 和 h 分别表示方框的宽和高。 要计算这些值 我们可以使用典型分类 CNN,用到的很多相同结构。
小飞侠xp
2018/10/10
7520
Advanced CNN Architectures(R-CNN系列)
关于Adobe Photoshop调整选区介绍
高品质预览:渲染更改的准确预览。此选项可能会影响性能。选择此选项后,在处理图像时,按住鼠标左键(向下滑动)可以查看更高分辨率的预览。取消选择此选项后,即使向下滑动鼠标时,也会显示更低分辨率的预览。
IT胶囊
2021/06/02
2.5K0
目标检测分割--Mask R-CNN
Mask R-CNN ICCV2017 best paper https://arxiv.org/pdf/1703.06870 Mask R-CNN= Faster R-CNN + FCN, 大致可以这么理解!
用户1148525
2019/05/26
8930
matlab输出论文仿真图
一般来说学校对于学术论文的图像都有一定的要求,比如线性、字体大小等,本文将讲解怎么出高清的图和绘制符合要求的图。
用户9925864
2022/07/27
1.1K0
matlab输出论文仿真图
PIXI输出base64图像
如果想使用 canvas 原生的 toDataURL ,参考这篇问答,以下代码是具体方法。但这个方法如果在iOS设备上使用,获取到的图像会上下翻转(效果相当于css3的transform: scaleY(-1);)。原因不明,可能也是webGL搞鬼吧。
黒之染
2018/10/19
1.6K0
【语义分割】一篇看完就懂的最新深度语义分割模型综述
语义分割结合了图像分类、目标检测和图像分割,通过一定的方法将图像分割成具有一定语义含义的区域块,并识别出每个区域块的语义类别,实现从底层到高层的语义推理过程,最终得到一幅具有逐像素语义标注的分割图像。
AI算法与图像处理
2020/02/24
16.4K0
【语义分割】一篇看完就懂的最新深度语义分割模型综述
点击加载更多

相似问题

使用SSH密钥进行BlueOcean连接

17

capistrano未使用ssh密钥进行记录

10

Submit_tag确认消息未显示确认消息

119

使用SSH密钥进行http用户验证

33

如何使用Yubikey对消息进行签名

123
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文