Что за ошибка при попытке выполнить action?

Помогите пожалуйста, вообще не понимаю откуда ошибка. Сижу и голову ломаю.
Использовала Create React App для создания приложения (из документации).
Хочу сначала подключить и более менее ориентировать в redux, а потом присоединить react-router и react-router-redux.
Просто для теста хотела сделать добавление нового юзера (action).
Протянула action в нужный компонент и тут ошибка:
Uncaught Error: Actions may not have an undefined "type" property. Have you misspelled a constant?
Я по разному протягивала action, пробовала bindActionCreators, по другим примера писала configureStore, не понимаю.
Помогите пожалуйста, в чём ошибка?
Все файлы ниже

appReducer.js
import {ADD_USER} from '../constans/appConstants';

const initialState = {
    users: [
        {
            name: "Nastya",
            age: 20
        }
    ]
};

const appReducer = (state = initialState, action) => {

    switch(action.type){

        case ADD_USER: {
            let newUser = {
                name: action.name,
                age: action.age
            };
            return {
                ...state,
                users: state.users.push(newUser)
            }
        }

        default:
            return {
                ...state
            }
    }
};

export default appReducer;


Написала для добавления action
import {ADD_USER} from '../constans/appConstants';

export const addUser = (name, age) => {
    return {
        type: ADD_USER,
        name: name,
        age: age
    }
};


Файл configureStore:
import { createStore, applyMiddleware } from 'redux';
import thunkMiddleware from 'redux-thunk';
import rootReducer from '../reducers/index';

const createStoreWithMiddleware = applyMiddleware(thunkMiddleware)(createStore);

const configureStore = initialState => (
    createStoreWithMiddleware(rootReducer, initialState)
);

export default configureStore;


Точка входа в приложение (index.js):
import registerServiceWorker from './registerServiceWorker';
import React from 'react';
import ReactDOM from 'react-dom';
import { Provider } from 'react-redux';
import './index.css';
import AppContainer from './containers/AppContainer';
import configureStore from './store/configureStore';

const render = (Component) => {
    ReactDOM.render(
        <Provider store={configureStore()}>
            <Component />
        </Provider>,
        document.getElementById('root'),
    );
};

render(AppContainer);

registerServiceWorker();


Контейнер AppContainer:
import React from 'react';
import {connect} from 'react-redux'
import {addUser} from '../actions/appActions'

import App from '../components/App';

const Application = props => <App {...props} />;

const mapStateToProps = state => ({
    appProps: state.appReducer
});

export default connect(mapStateToProps, {
    addUser
})(Application);


Компонент App:
import React, {Component} from 'react';

import AddUserForm from './AddUserForm';

class App extends Component {
    render() {
        let {addUser} = this.props;
        return (
            <div>
                <h1>Hello World</h1>
                <hr/><br/><br/>
                <AddUserForm addUser={addUser} />
            </div>
        )
    }
}

export default App;


И компонент AddUserForm:
import React, {Component} from 'react';

class AddUserForm extends Component {

    constructor(props){
        super(props);
        this.addNewUser = this.addNewUser.bind(this);
    }

    addNewUser() {
        let {addUser} = this.props;
        let name = this.inputUserName.value;
        let age = this.inputUserAge.value;
        addUser(name, age);
    }

    render() {
        return (
            <form>
                <input ref={input => {this.inputUserName = input}} type="text" name="name" placeholder="Name new user"/>
                <input ref={input => {this.inputUserAge = input}} type="text" name="age" placeholder="Age new user"/>
                <button onClick={this.addNewUser} type="button">Add User</button>
            </form>
        )
    }
}

export default AddUserForm;
  • Вопрос задан
  • 2885 просмотров
Решения вопроса 2
rockon404
@rockon404 Куратор тега React
Frontend Developer
Видимо ошибка тут:
import {ADD_USER} from '../constans/appConstants';
Попробуйте вывести в консоль ADD_USER, скорей всего там undefined.
Возможно опечатка в пути импорта.
И еще, старайтесь в actionCreator возвращать полезную нагрузку в ключе payload

export const addUser = (name, age) => {
    return {
        type: ADD_USER,
        payload: {
            name: name,
            age: age,
        },
    }
};
Ответ написан
RomReed
@RomReed
JavaScript, Flutter, ReactNative, Redux, Firebase
может проблема в том что у вас файл appConstants без .js
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы