【问题标题】:Redux app not workRedux 应用程序不起作用
【发布时间】:2016-03-17 22:32:17
【问题描述】:

我按照官方文档http://redux.js.org/docs/basics/ 中的说明制作了 Redux 应用程序,但它不起作用。我有四个文件:store、reduction、action 和 build。

action.js:

export const ADD_TODO = 'ADD_TODO';
export const COMPLETE_TODO = 'COMPLETE_TODO';
export const ADD_FILTER = 'ADD_FILTER';

export const Filters = {
    SHOW_ALL: 'SHOW_ALL',
    SHOW_COMPLETED: 'SHOW_COMPLETED',
    SHOW_ACTIVE: 'SHOW_ACTIVE'
};

export function addTodo(text) {
    return {
        type: ADD_TODO,
        text
    };
};

export function completeTodo(index) {
    return {
        type: COMPLETE_TODO,
        index
    };
};

export function setFilter(filter) {
    return {
        type: ADD_FILTER,
        filter
    }
};

reducers.js:

import {Filters, ADD_TODO, COMPLETE_TODO, ADD_FILTER} from './action.js';
import {combineReducers} from 'redux';

function todos(state = [], action = null) {
    switch(action.type) {
        case ADD_TODO:
            return [
                ...state,
                {
                    text: action.text,
                    completed: false
                }
            ];
            break;
        case COMPLETE_TODO:
            return [
                ...state.slice(0, action.index),
                Object.assign({}, state.todos[action.index], {
                    completed: true
                }),
                ...state.slice(action.index + 1)
            ];
            break;
        default:
            return state;
        break;
    };
};

function filters(state = Filters.SHOW_ALL, action = null) {
    if(action && action.type == ADD_FILTER) {
        return action.filter;
    }
    else {
        return state;
    }
};

const todoApp = combineReducers({
    filters,
    todos
});

export default todoApp;

store.js:

import {todoApp} from './reducers.js';
import {createStore} from 'redux';
import {Filters, addTodo, completeTodo, setFilter} from './action.js';

let store = createStore(todoApp);

console.log(store.getState());

let unsubscribe = store.subscribe(function() {
    console.log(store.getState());
});

store.dispatch(addTodo('Learn action'));
store.dispatch(addTodo('Learn reducers'));
store.dispatch(addTodo('Learn store'));
store.dispatch(completeTodo(0));
store.dispatch(completeTodo(1));
store.dispatch(setFilter(Filters.SHOW_COMPLETED));

unsubscribe();

我有 webpack-build 文件。

var path = require('path');
var webpack = require('webpack');
var config = {
    context: path.join(__dirname), 
    entry: ['react', 'redux', './action', './reducers', './store'], 
    output: {
        path: path.join(__dirname, 'assets') 
    },
    module: {
        loaders: [
            { test: /\.js$/, exclude: /node_modules/, loader: "babel-loader"}
        ]
    }
};
var compiler = webpack(config);
compiler.run(function (err, stats) {
    if(err) {
        console.log('Error:' + err);
    }
    else {
        console.log('Win');
    }
});

当我在控制台中打开带有所有已编译代码的 HTML 页面时,返回:SyntaxError: missing ; before statement。怎么了?

【问题讨论】:

  • 所以你的状态最初是一个对象然后你把它变成一个数组?并不是说initialState 没有在任何地方使用。
  • @zerkms 是的,initialState 不再需要。我删了。

标签: javascript reactjs redux


【解决方案1】:

我将 let 替换为 'var' 并正常工作!

【讨论】:

  • 这不是解决方案。对于 ES2015,没有理由使用 var。因此,最好了解真正会发生什么并正确修复它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-05
  • 2017-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-31
相关资源
最近更新 更多