Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 与redux异步工作?但是仍然会出现错误,我应该忽略它吗?_Javascript_Jquery_Reactjs_Redux_Redux Thunk - Fatal编程技术网

Javascript 与redux异步工作?但是仍然会出现错误,我应该忽略它吗?

Javascript 与redux异步工作?但是仍然会出现错误,我应该忽略它吗?,javascript,jquery,reactjs,redux,redux-thunk,Javascript,Jquery,Reactjs,Redux,Redux Thunk,我用的是混合的拉维,反应 正在尝试实现redux thunk中间件。 我在异步调用方面遇到问题。 我想使用jqueryforajax(它成功地检索了API数据,但是我得到了一个错误 “错误:dispatch不是一个函数”,这意味着我不能对存储进行任何更改。据我所知,dispatch和GetState是通过thunk中间件传递的。正确吗?那么为什么我不能使用该函数呢 它还给了我一个错误:“错误:操作可能没有未定义的“type”属性。是否拼写错误了常量?” 在尝试处理上述问题后出现的另一个问题是:“

我用的是混合的拉维,反应

正在尝试实现redux thunk中间件。 我在异步调用方面遇到问题。 我想使用jqueryforajax(它成功地检索了API数据,但是我得到了一个错误

“错误:dispatch不是一个函数”,这意味着我不能对存储进行任何更改。据我所知,dispatch和GetState是通过thunk中间件传递的。正确吗?那么为什么我不能使用该函数呢

它还给了我一个错误:“错误:操作可能没有未定义的“type”属性。是否拼写错误了常量?”

在尝试处理上述问题后出现的另一个问题是:“错误:操作必须是普通对象。使用自定义中间件执行异步操作。”

我读过许多类似的问题,但我似乎仍然无法让它发挥作用

“操作必须是普通对象。对异步操作使用自定义中间件。”

index.js
从“React”导入React;
从“react dom”导入react dom;
从“react redux”导入{Provider}
从“./SideBar/FilterBar”导入FilterBar;
从“../redux/Store/mainStore”导入存储;
从“../redux/actions/actions”导入{REMOVE_ATTRIBUTE_FILTER,将_ATTRIBUTE_添加到_FILTER,removeAttribute};
Store.subscribe(()=>{
log(“存储更改”,store.getState())
})
log(Store.getState());
仓库调度({
类型:将属性添加到过滤器,
有效负载:{'make':23}
})
if(document.getElementById('InventoryDisplay')){
ReactDOM.render(
,document.getElementById('FilterBar');

}
很难确切地知道发生了什么,但我绝对不建议忽略/破解使用流行库的一个常见功能所遇到的错误。为了简单起见,正确实现非常重要

在我看来,你使用thunk的方式有点奇怪。 由分派的操作返回的函数具有dispatch和getState作为参数:

在您的情况下,您的thunk操作可能如下所示

在你的行动中。js:

export function getAttributes2(){
  return function(dispatch, getState){
    // you could dispatch a fetching action here before requesting!
    return $.ajax('/getFilteredAttributes/', {type: 'GET', dataType: 'json'})
      .done(response => dispatch(saveTheResponseAction(response)))
      .fail((xhr, status, error) => console.log("failed"))
}
import {getAttributes2} from '../../../redux/actions/actions';

const mapDispatchToProps = dispatch => {
  return {
    getAttributes2: () => dispatch(getAttributes2()),
  }
}
将thunk功能映射到您的道具:

export function getAttributes2(){
  return function(dispatch, getState){
    // you could dispatch a fetching action here before requesting!
    return $.ajax('/getFilteredAttributes/', {type: 'GET', dataType: 'json'})
      .done(response => dispatch(saveTheResponseAction(response)))
      .fail((xhr, status, error) => console.log("failed"))
}
import {getAttributes2} from '../../../redux/actions/actions';

const mapDispatchToProps = dispatch => {
  return {
    getAttributes2: () => dispatch(getAttributes2()),
  }
}
通过这种方式,您可以从api调用的.done部分发送一个操作,其中包含结果,您可以响应错误,甚至可以在返回api调用之前发送一个操作,让redux知道您已请求但尚未收到数据,从而允许您执行各种加载状态


我希望这有帮助,让我知道:)

不,目前的错误是:操作必须是普通对象。使用自定义中间件进行异步操作。好吧,我想在设置中间件的方式上一定存在一些问题。你能先设置一个简单的CRA项目并检查你是否能在一个非常简单的环境中启动和运行。是的,实际中间件的设置在mainstore.js中。我只是按照教程,我不知道为什么我不能运行分派功能,或者thunk是否正常运行。