Ich versuche Redux Online-Tutorials zu verstehen, die von Dan Abramov gepostet werden. Derzeit bin ich auf folgendes Beispiel:Spread Operator funktioniert nicht für Redux/ES6-basiertes Beispiel
Reducer composition with Arrays
Hier ist meine Praxis Code nach dem obigen Beispiel:
// Individual TODO Reducer
const todoReducer = (state, action) => {
switch(action.type) {
case 'ADD_TODO':
return {
id: action.id,
text: action.text,
completed: false
};
case 'TOGGLE_TODO':
if (state.id != action.id) return state;
// This not working
/*
return {
...state,
completed: !state.completed
};
*/
//This works
var newState = {id: state.id, text: state.text, completed: !state.completed};
return newState;
default:
return state;
}
};
//TODOS Reducer
const todos = (state = [], action) => {
switch(action.type) {
case 'ADD_TODO':
return [
...state,
todoReducer(null, action)
];
case 'TOGGLE_TODO':
return state.map(t => todoReducer(t, action));
default:
return state;
}
};
//Test 1
const testAddTodo =() => {
const stateBefore = [];
const action = {
type: 'ADD_TODO',
id: 0,
text: 'Learn Redux'
};
const stateAfter = [{
id: 0,
text: "Learn Redux",
completed: false
}];
//Freeze
deepFreeze(stateBefore);
deepFreeze(action);
// Test
expect(
todos(stateBefore, action)
).toEqual(stateAfter);
};
//Test 2
const testToggleTodo =() => {
const stateBefore = [{id: 0,
text: "Learn Redux",
completed: false
}, {
id: 1,
text: "Go Shopping",
completed: false
}];
const action = {
type: 'TOGGLE_TODO',
id: 1
};
const stateAfter = [{
id: 0,
text: "Learn Redux",
completed: false
}, {
id: 1,
text: "Go Shopping",
completed: true
}];
//Freeze
deepFreeze(stateBefore);
deepFreeze(action);
// Expect
expect(
todos(stateBefore, action)
).toEqual(stateAfter);
};
testAddTodo();
testToggleTodo();
console.log("All tests passed");
Ausgabe ist, innerhalb der todoReducer Funktion, Syntax folgenden nicht funktioniert:
return {
...state,
completed: !state.completed
};
ich bin mit Firefox ab Version 44.0 und es zeigt mir folgende Fehler in der Konsole:
Invalid property id
Jetzt denke ich, meine aktuelle Version von Firefox muss Spread-Operator unterstützen. Wenn dies nicht der Fall ist, gibt es eine Möglichkeit, einige eigenständige Polyfill hinzuzufügen, um diese Syntax zu unterstützen?
Hier ist auch die JSFiddle
Der Vollständigkeit halber: [! '...' kein Operator ist] (https://stackoverflow.com/questions/37151966/what -ist-spreadelement-in-ecmascript-Dokumentation-is-it-the-sam e-as-spread-oper/37152508 # 37152508) –