Suomi Suomi - 8 months ago 58
React JSX Question

Getting a "Uncaught ReferenceError: type is not defined" error in React / Redux?

I'm making a very simple ToDo list with Redux and React. I'm getting a "Uncaught ReferenceError: type is not defined" when trying to add a todo item. I have tried several things, here is my current code. Any ideas what I'm doing wrong? Thank you!

Here is my container:

import React, {Component} from 'react';
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
import { addTodo } from '../actions/index';

class Todos extends Component {
constructor(props) {
this.state = {text: ''};

addTodo(e) {
text: ''

updateValue(e) {

render() {
return (
<form onSubmit={(e) => this.addTodo(e)}>
placeholder="Add Todo"
onChange={(e) => {
<button type="submit">Add Todo</button>
{ => {
return <li key={}>{ item.message }</li>

function mapStateToProps({ todo }) {
return { todo }

function mapDispatchToProps(dispatch) {
return bindActionCreators({addTodo}, dispatch);

export default connect(mapStateToProps, mapDispatchToProps)(Todos);

Here is the reducer:

import { ADD_TODO } from '../actions/types';

export default function(state=[], action) {
switch(action.type) {
case ADD_TODO:
return [ action.payload.message, ...state ]
return state;

And ../reducers/index.js

import { combineReducers } from 'redux';
import TodosReducer from './reducer_addTodo';

const rootReducer = combineReducers({
todo: TodosReducer

export default rootReducer;

And the action:

import { ADD_TODO } from './types';
const uid = () => Math.random().toString(34).slice(2);

export function addTodo(message) {
const action = {
id: uid(),
message: message
type: ADD_TODO,
payload: action

When trying to add a Todo item, I get the following error:

Uncaught ReferenceError: type is not defined
at addTodo (bundle.js:21950)
at Object.addTodo (bundle.js:21166)
at Todos.addTodo (bundle.js:23541)
at onSubmit (bundle.js:23562)
at Object.ReactErrorUtils.invokeGuardedCallback (bundle.js:4532)
at executeDispatch (bundle.js:4332)
at Object.executeDispatchesInOrder (bundle.js:4355)
at executeDispatchesAndRelease (bundle.js:3785)
at executeDispatchesAndReleaseTopLevel (bundle.js:3796)
at Array.forEach (<anonymous>)


Here is the types.js file:

export const ADD_TODO = 'ADD_TODO';

Answer Source

I think the main reason of the error is due to a typo in your addTodo function. Replace the parenthesis with curly braces

export function addTodo(message) {
    const action = {
        id: uid(),
        message: message
    return {
        type: ADD_TODO,
        payload: action
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download