Javascript 反应+;Redux-未捕获错误:操作可能没有未定义的“错误”;“类型”;财产

Javascript 反应+;Redux-未捕获错误:操作可能没有未定义的“错误”;“类型”;财产,javascript,reactjs,redux,Javascript,Reactjs,Redux,我尝试创建一个简单的react-redux ajax工作示例,如下所示,但出现以下错误: Uncaught Error: Actions may not have an undefined "type" property. Have you misspelled a constant? 错误由以下原因引发: dispatch(fetchProducts(this.props))在App.jsx中 import React, { Component } from 'react'; import

我尝试创建一个简单的react-redux ajax工作示例,如下所示,但出现以下错误:

Uncaught Error: Actions may not have an undefined "type" property. Have you misspelled a constant?
错误由以下原因引发:

dispatch(fetchProducts(this.props))在App.jsx中

import React, { Component } from 'react';
import ReactDOM from 'react-dom';
import { compose, createStore, applyMiddleware } from 'redux'
import { Provider } from 'react-redux';
import thunkMiddleware from 'redux-thunk';
import createLogger from 'redux-logger';
import { createDevTools, persistState} from 'redux-devtools';

import DevTools from './DevTools.jsx';
import App from './App.jsx';
import rootReducer from './reducers.js';

const loggerMiddleware = createLogger();

function configureStore(initialState) {
    return createStore(
        rootReducer,
        initialState,
        DevTools.instrument(),
        applyMiddleware(
            thunkMiddleware,
            loggerMiddleware
        ),

        // Lets you write ?debug_session=<name> in address bar to persist debug sessions
        persistState(window.location.href.match(/[?&]debug_session=([^&]+)\b/))
    )
}

const store = configureStore();

ReactDOM.render(
<Provider store={store}>
    <App />
</Provider>, document.getElementsByClassName('products')[0]);
import React, { Component } from 'react';
import ReactDOM from 'react-dom';
import { compose, createStore, applyMiddleware } from 'redux'
import { Provider } from 'react-redux';
import thunkMiddleware from 'redux-thunk';
import createLogger from 'redux-logger';
import { createDevTools, persistState} from 'redux-devtools';

import DevTools from './DevTools.jsx';
import App from './App.jsx';
import rootReducer from './reducers.js';

const loggerMiddleware = createLogger();

function configureStore(initialState) {
    return createStore(
        rootReducer,
        initialState,
        compose(
            applyMiddleware(
                thunkMiddleware,
                loggerMiddleware
            ),
            DevTools.instrument(),
            persistState(window.location.href.match(/[?&]debug_session=([^&]+)\b/))
        )
    )
}

const store = configureStore();

ReactDOM.render(
<Provider store={store}>
    <App />
</Provider>, document.getElementsByClassName('products')[0]);
index.jsx

import React, { Component } from 'react';
import ReactDOM from 'react-dom';
import { compose, createStore, applyMiddleware } from 'redux'
import { Provider } from 'react-redux';
import thunkMiddleware from 'redux-thunk';
import createLogger from 'redux-logger';
import { createDevTools, persistState} from 'redux-devtools';

import DevTools from './DevTools.jsx';
import App from './App.jsx';
import rootReducer from './reducers.js';

const loggerMiddleware = createLogger();

function configureStore(initialState) {
    return createStore(
        rootReducer,
        initialState,
        DevTools.instrument(),
        applyMiddleware(
            thunkMiddleware,
            loggerMiddleware
        ),

        // Lets you write ?debug_session=<name> in address bar to persist debug sessions
        persistState(window.location.href.match(/[?&]debug_session=([^&]+)\b/))
    )
}

const store = configureStore();

ReactDOM.render(
<Provider store={store}>
    <App />
</Provider>, document.getElementsByClassName('products')[0]);
import React, { Component } from 'react';
import ReactDOM from 'react-dom';
import { compose, createStore, applyMiddleware } from 'redux'
import { Provider } from 'react-redux';
import thunkMiddleware from 'redux-thunk';
import createLogger from 'redux-logger';
import { createDevTools, persistState} from 'redux-devtools';

import DevTools from './DevTools.jsx';
import App from './App.jsx';
import rootReducer from './reducers.js';

const loggerMiddleware = createLogger();

function configureStore(initialState) {
    return createStore(
        rootReducer,
        initialState,
        compose(
            applyMiddleware(
                thunkMiddleware,
                loggerMiddleware
            ),
            DevTools.instrument(),
            persistState(window.location.href.match(/[?&]debug_session=([^&]+)\b/))
        )
    )
}

const store = configureStore();

ReactDOM.render(
<Provider store={store}>
    <App />
</Provider>, document.getElementsByClassName('products')[0]);
import React,{Component}来自'React';
从“react dom”导入react dom;
从“redux”导入{compose,createStore,applyMiddleware}
从'react redux'导入{Provider};
从“redux thunk”导入thunk中间件;
从“redux logger”导入createLogger;
从'redux devtools'导入{createDevTools,persistState};
从“./DevTools.jsx”导入DevTools;
从“/App.jsx”导入应用程序;
从“./reducers.js”导入rootReducer;
const loggerMiddleware=createLogger();
函数配置存储(初始状态){
返回createStore(
减根剂,
初始状态,
DevTools.instrument(),
applyMiddleware(
Thunk,
日志软件
),
//允许您在地址栏中写入?debug_session=以持久化调试会话
persistState(window.location.href.match(/[?&]debug_session=([^&]+)\b/)
)
}
const store=configureStore();
ReactDOM.render(
,document.getElementsByClassName('products')[0]);

您刚刚忘记编写增强器,
createStore
的第三个参数必须是一个函数,因此您需要编写所有增强器,以提供唯一的
增强器

index.jsx

import React, { Component } from 'react';
import ReactDOM from 'react-dom';
import { compose, createStore, applyMiddleware } from 'redux'
import { Provider } from 'react-redux';
import thunkMiddleware from 'redux-thunk';
import createLogger from 'redux-logger';
import { createDevTools, persistState} from 'redux-devtools';

import DevTools from './DevTools.jsx';
import App from './App.jsx';
import rootReducer from './reducers.js';

const loggerMiddleware = createLogger();

function configureStore(initialState) {
    return createStore(
        rootReducer,
        initialState,
        DevTools.instrument(),
        applyMiddleware(
            thunkMiddleware,
            loggerMiddleware
        ),

        // Lets you write ?debug_session=<name> in address bar to persist debug sessions
        persistState(window.location.href.match(/[?&]debug_session=([^&]+)\b/))
    )
}

const store = configureStore();

ReactDOM.render(
<Provider store={store}>
    <App />
</Provider>, document.getElementsByClassName('products')[0]);
import React, { Component } from 'react';
import ReactDOM from 'react-dom';
import { compose, createStore, applyMiddleware } from 'redux'
import { Provider } from 'react-redux';
import thunkMiddleware from 'redux-thunk';
import createLogger from 'redux-logger';
import { createDevTools, persistState} from 'redux-devtools';

import DevTools from './DevTools.jsx';
import App from './App.jsx';
import rootReducer from './reducers.js';

const loggerMiddleware = createLogger();

function configureStore(initialState) {
    return createStore(
        rootReducer,
        initialState,
        compose(
            applyMiddleware(
                thunkMiddleware,
                loggerMiddleware
            ),
            DevTools.instrument(),
            persistState(window.location.href.match(/[?&]debug_session=([^&]+)\b/))
        )
    )
}

const store = configureStore();

ReactDOM.render(
<Provider store={store}>
    <App />
</Provider>, document.getElementsByClassName('products')[0]);
import React,{Component}来自'React';
从“react dom”导入react dom;
从“redux”导入{compose,createStore,applyMiddleware}
从'react redux'导入{Provider};
从“redux thunk”导入thunk中间件;
从“redux logger”导入createLogger;
从'redux devtools'导入{createDevTools,persistState};
从“./DevTools.jsx”导入DevTools;
从“/App.jsx”导入应用程序;
从“./reducers.js”导入rootReducer;
const loggerMiddleware=createLogger();
函数配置存储(初始状态){
返回createStore(
减根剂,
初始状态,
谱写(
applyMiddleware(
Thunk,
日志软件
),
DevTools.instrument(),
persistState(window.location.href.match(/[?&]debug_session=([^&]+)\b/)
)
)
}
const store=configureStore();
ReactDOM.render(

请尝试将您提供的代码缩小到您认为相关的区域-很难在一个问题中通读整个应用程序。至于您的问题,您似乎将redux thunk作为命名导入,而它应该是默认导入,例如,
从“redux thunk”导入thunk中间件。
@ShaneCavaliere谢谢或者回答。我编辑了我的问题并尝试减少问题中的代码(我是redux新手)。我将
thunkMiddleware
更改为默认导入,但没有帮助。中间件需要是
createStore
的第三个参数,而不是第四个参数-根据文档:
createStore(reducer,[initialState],[enhancer])
-尝试删除开发工具注入。@你说得对,谢谢。