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