首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >redux调度错误:未定义的错误

redux调度错误:未定义的错误
EN

Stack Overflow用户
提问于 2021-11-03 01:02:38
回答 2查看 237关注 0票数 0

我正在尝试用redux state managementreact制作一个应用程序。我需要从API中fetch,并且我已经将所有API逻辑放在另一个文件中,我正在尝试将来自响应的数据放到state in redux中。我尝试过: API脚本文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import store from "./store";
import foo from "./foo.js";

fetch("http://my_fantastic_api.com/fooBar/");
.then((response)=>{
   if (reponse.status.OK){
       //The error:
     store.dispatch({
      type:"MODIFY_XYZ"
     });
  }
}).catch(error =>{
   throw new error()
})

但是,当我尝试这个方法时,我遇到了这个错误,当fetch函数被一个按钮调用时,按下一个错误。

错误信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Unhandled Rejection (Error): When called with an action of type "MODIFY_XYZ", the slice reducer for key "FOO_BAR" returned undefined. To ignore an action, you must explicitly return the previous state. If you want this reducer to hold no value, you can return null instead of undefined.

如果有人有任何想法或建议,我非常感谢他们,我正试图找到解决这个错误的方法。

向阿尔文问好。

编辑:

存储文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//Importing packages
import React from "react";
import ReactDOM from "react-dom";
import "./index.css";
import App from "./App.jsx";
import reportWebVitals from "./reportWebVitals";
import { Provider } from "react-redux";
import { createStore } from "redux";
import reducers from "./redux/reducers/index.js";

//Redux configuration
export const store = createStore(reducers);

//Render app
ReactDOM.render(
  <Provider store={store}>
    <App />
  </Provider>,
  document.getElementById("root")
);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-11-03 04:04:40

实际上,你没有正确地出口商店。我认为您需要在单独的文件中创建存储,然后导出它。

文件结构应该是这样的-

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-src
--index.js
--app.js
--store
---index.js
---reducers
----index.js

现在在src/store/index.js文件中看起来是这样的-

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { createStore, applyMiddleware } from "redux";
import thunkMiddleware from "redux-thunk";
import { composeWithDevTools } from "redux-devtools-extension";

import Reducers from "./reducers";

const middlewares = applyMiddleware(thunkMiddleware);
const enhancers = [middlewares];
const composedEnhancers = composeWithDevTools(...enhancers);

const store = createStore(Reducers, undefined, composedEnhancers);

export default store;

如果您想要添加dev tools middlewareredux-thunk

src/store/reducers/index.js文件中,所有的还原器都将与combinedReducers模块绑定-

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { combineReducers } from "redux";

import BlogReducer from "./blogReducer";
import UserReducer from "./userReducer";

export default combineReducers({
  blogStore: BlogReducer,
  userStore: UserReducer,
});

这里,BlogReducerUserReducercombineReducers绑定。你可以在这里加上你的-

现在在您的src/index.js文件中添加如下-

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//Importing packages
import React from "react";
import ReactDOM from "react-dom";
import "./index.css";
import App from "./App.jsx";
import reportWebVitals from "./reportWebVitals";
import { Provider } from "react-redux";
import store from "./store";


//Render app
ReactDOM.render(
  <Provider store={store}>
    <App />
  </Provider>,
  document.getElementById("root")
);

src/app.js中,您可以调用API并将其分配到redux存储-

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { useEffect } from "react";
import { useSelector, useDispatch } from "react-redux";

const App = () => {
  //Get dispatch from useDispatch hook
  const dispatch = useDispatch();
  
  //Get store from useSelector hook
  const store = useSelector( store => store)

  const getApiResponse = () => {
     fetch("http://my_fantastic_api.com/fooBar/");
    .then((response)=>{
       if (reponse.status.OK){
       //The error:
         dispatch({type:"MODIFY_XYZ"});
      }
    }).catch(error =>{
     throw new error()
    })
  }
  
  useEffect( () => {
    getApiResponse()
  },[])

  return (
    <h1> Hello World! </h1>
  )
}

export default App;
``
票数 0
EN

Stack Overflow用户

发布于 2021-11-03 01:48:33

你商店里有什么我认为你应该用useDispatch钩子来调度一个动作

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69822125

复制
相关文章
被解放的姜戈05 黑面管家
Django提供一个管理数据库的app,即django.contrib.admin。这是Django最方便的功能之一。通过该app,我们可以直接经由web页面,来管理我们的数据库。这一工具,主要是为网
Vamei
2018/01/18
1.2K0
被解放的姜戈05 黑面管家
被解放的姜戈01 初试天涯
Django是Python下的一款网络服务器框架。Python下有许多款不同的框架。Django是重量级选手中最有代表性的一位。许多成功的网站和APP都基于Django。虽然Django之于Pytho
Vamei
2018/01/18
2.8K0
被解放的姜戈01 初试天涯
被解放的姜戈02 庄园疑云
上一回说到,姜戈的江湖初体验:如何架设服务器,如何回复http请求,如何创建App。这一回,我们要走入糖果庄园。 数据库是一所大庄园,藏着各种宝贝。一个没有数据库的网站,所能提供的功能会非常有限。 为
Vamei
2018/01/18
1.6K0
被解放的姜戈02 庄园疑云
被解放的姜戈04 各取所需
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢! 我们在庄园疑云中讲到了服务器上的数据。当时我们是用手动的方式,直接在数据库插入数
Vamei
2018/01/18
1.1K0
被解放的姜戈04 各取所需
被解放的姜戈03 所谓伊人
在之前的程序中,我们直接生成一个字符串,作为http回复,返回给客户端。这一过程中使用了django.http.HttpResponse()。 在这样的一种回复生成过程中,我们实际上将数据和视图的格式
Vamei
2018/01/18
1K0
被解放的姜戈03 所谓伊人
被解放的姜戈06 假作真时
之前了解了: 创建Django项目 数据库 模板 表格提交 admin管理页面 上面的功能模块允许我们做出一个具有互动性的站点,但无法验证用户的身份。我们这次了解用户验证部分。通过用户验证,我们可以根据用户的身份,提供不同的服务。 一个Web应用的用户验证是它的基本组成部分。我们在使用一个应用时,总是从“登录”开始,到“登出”结束。另一方面,用户验证又和网站安全、数据库安全息息相关。HTTP协议是无状态的,但我们可以利用储存在客户端的cookie或者储存在服务器的session来记录用户的访问。  Djan
Vamei
2018/01/18
1.3K0
被解放的姜戈06 假作真时
被解放的姜戈07 马不停蹄
前面的文章研究了Django最主要的几个方面:数据库,模板,动态生成页面等。但都是使用python manage.py runserver来运行服务器。这是一个实验性的web服务器,不适用于正常的站点运行。我们需要一个可以稳定而持续的服务器。这个服务器负责监听http端口,将收到的请求交给Django处理,将Django的回复发还给客户端。 这样的持续性服务器可以有很多选择,比如apache, Nginx, lighttpd等。这里将使用最常见的apache服务器。服务器和Django之间通过Python的
Vamei
2018/01/18
1K0
被解放的姜戈07 马不停蹄
被解放的姜戈08 远走高飞
作者:Vamei 出处:http://www.cnblogs.com/vamei 转载请先与我联系。  之前在单机上实现了一个Django服务器(被解放的姜戈07 马不停蹄),现在我们可以把这个服务器
Vamei
2018/01/18
6350
被解放的姜戈08 远走高飞
(转)js获取get变量函数
function GetQueryString(name) {     var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");     var r = window.location.search.substr(1).match(reg);     if (r != null) return decodeURIComponent(r[2]); return null; } //直接调用GetQueryString(get变量名)
仙士可
2019/12/17
5.1K0
获取、修改前端HTML标签信息【jQuery】
还在用 document.getelementById('xxx').value 这种方式来获取H妈妈[HTML]某类标签信息嘛,最近用上jquery的方式,爱不释手。下面记录了几个取值案例,(会后续补充)
来杯Sherry
2023/05/25
1.3K0
jquery中通过鼠标获取页面坐标
<html> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8"> <title>jquery_shijian_function.html</title> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript"> $(document).ready(function(){
闵开慧
2018/03/30
3.3K0
通过getter获取setter函数
放在:https://gitee.com/dromara/stream-query
阿超
2023/06/23
1430
JavaScript 学习-36.jQuery 获取和修改HTML
前言 jQuery 可以获取和修改HTML元素的属性和文本内容 text() - 设置或返回所选元素的文本内容 html() - 设置或返回所选元素的内容(包括 HTML 标记) attr() - 获取或设置属性 val() - 设置或返回表单字段的值 获取文本 text() 和 html() text()是获取文本内容,html()返回所选元素的内容(包括 HTML 标记) <h3>获取html内容</h3> <div id="demo"> <p class="text-info">hello w
上海-悠悠
2022/05/31
7970
JavaScript 学习-36.jQuery 获取和修改HTML
详细解读Jquery各Ajax函数:$.get(),$.post(),$.ajax(),$.getJSON()
一,$.get(url,[data],[callback]) 说明:url为请求地址,data为请求数据的列表(是可选的,也可以将要传的参数写在url里面),callback为请求成功后的回调函数,该函数接受两个参数,第一个为服务器返回的数据,第二个参数为服务器的状态,是可选参数。而其中,服务器返回数据的格式其实是字符串形势,并不是我们想要的json数据格式,在此引用只是为了对比说明。 1 $.get("data.php",$("#firstName.val()"),function(data){ 2 3
用户1214487
2018/01/24
3.9K0
通过time()函数获取时间戳
取走直接用,当个 demo 挺好的。 #include <iostream> #include <time.h> #include <unistd.h> using namespace std; int main() { string str; time_t myt = time(NULL); cout << "sizeof(time_t) is: " << sizeof(time_t) << endl; cout << "myt is :" << myt << endl;
看、未来
2021/10/21
8180
通过jQuery获取页面中radio选中的值
<tr> <td class="tdtext" colspan="3">2、廉洁自律,不利用岗位职权方便谋取私利。</td> <td class="trss"><input name="radio17" type="radio" value="5" required/></td> <td class="trss"><input name="radio17" type="radio" value="4" /></td> <td class="trss"><input name=
SingYi
2022/07/13
5.6K0
通过jQuery获取页面中radio选中的值
fopen()、 file_get_contents() 通过url获取链接内容
功能:获得网页内容 区别如下: fopen()打开URL 下面是一个使用fopen()打开URL的例子: <?php $fh = fopen('http://www.baidu.com/', 'r'
WindWant
2020/09/11
1.4K0
更加方便获取eid和fp的一种方式-通过HTML文件
原来有一篇文章的教程,获取eid和fp的。 https://chenhx.blog.csdn.net/article/details/112069082
谙忆
2021/01/19
8540
Android通过URI获取文件路径
之前在工作的过程中,遇到不同 Android 版本下 URI 采用不同方式来获取文件路径的问题。 因为需求的原因,要求拍照上传或者从相册中选择图片上传,而且图片是需要经过压缩的,大小不能超过2M。 很快,拍照的这部分就搞定了。那么相册中选择图片的也是一样的道理,应该也是轻松解决了。 至于选择图片的代码,如下所示: intent = new Intent(Intent.ACTION_GET_CONTENT); intent.addCategory(Intent.CATEGORY_OPENABLE); inte
俞其荣
2018/05/21
3K0
点击加载更多

相似问题

在Android中启动新活动的多个意图标志

33

Java/Android -启动新活动标志错误

22

Android:无法使用意图启动新活动

80

Android -带有标志的待定意图

17

启动器活动意图标志

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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