Redux Reducer - 如何将此状态保存为对象? (我得到 "Parsing Error")
Redux Reducer - how can I save this state as object? (I'm getting "Parsing Error")
我的代码如下所示:
import { SAVE_SEARCH } from '../actions/index';
export default function (state = [], action) {
switch (action.type) {
case SAVE_SEARCH:
return [...state, action.payloadTwo, action.payloadOne];
default:
return state;
}
}
在我的状态下我得到了这样的结果:
有效,但这是一个数组。我想将其更改为对象,如下所示:
case SAVE_SEARCH:
return [...state, { action.payloadTwo: action.payloadOne }];
因此 searchTerm 将是对象中的键,数据将保存为对象键值。
但是这段代码给我一个错误:
我知道这对你来说是显而易见的。为什么我不能这样编码?为什么我得到 "Parsing Error"?
----------------
编辑:
非常感谢@marekful 的回答!现在可以使用了!
我的action.js代码:
import axios from 'axios';
export const SAVE_SEARCH = 'SAVE_SEARCH';
export function searchTest(query) {
const githubApi = `https://api.github.com/search/repositories?q=${query}&sort=stars&order=desc`;
const request = axios.get(githubApi);
return (dispatch) => {
request.then(({ data: dataFromGithub }) => {
dispatch({ type: SAVE_SEARCH, payloadOne: query, payloadTwo: dataFromGithub });
});
};
}
减速器代码:
import { SAVE_SEARCH } from '../actions/index';
export default function (state = [], action) {
switch (action.type) {
case SAVE_SEARCH:
const o = {};
o[action.payloadOne] = action.payloadTwo;
return [...state, o];
default:
return state;
}
}
结果:
在对象字面量中,键只能是字符串字面量(值可以是对象引用):{"someKey": object.property}
但是,您可以使用对象引用或函数 return 值作为使用数组表示法的对象键(但它仍然必须是字符串):
let o = {};
o[action.payloadTwo] = action.payloadOne;
return [...state, o];
在 ES6 中你可以直接使用:
return [...state, { [action.payloadTwo]: action.payloadOne] }];
我的代码如下所示:
import { SAVE_SEARCH } from '../actions/index';
export default function (state = [], action) {
switch (action.type) {
case SAVE_SEARCH:
return [...state, action.payloadTwo, action.payloadOne];
default:
return state;
}
}
在我的状态下我得到了这样的结果:
有效,但这是一个数组。我想将其更改为对象,如下所示:
case SAVE_SEARCH:
return [...state, { action.payloadTwo: action.payloadOne }];
因此 searchTerm 将是对象中的键,数据将保存为对象键值。
但是这段代码给我一个错误:
我知道这对你来说是显而易见的。为什么我不能这样编码?为什么我得到 "Parsing Error"?
----------------
编辑:
非常感谢@marekful 的回答!现在可以使用了!
我的action.js代码:
import axios from 'axios';
export const SAVE_SEARCH = 'SAVE_SEARCH';
export function searchTest(query) {
const githubApi = `https://api.github.com/search/repositories?q=${query}&sort=stars&order=desc`;
const request = axios.get(githubApi);
return (dispatch) => {
request.then(({ data: dataFromGithub }) => {
dispatch({ type: SAVE_SEARCH, payloadOne: query, payloadTwo: dataFromGithub });
});
};
}
减速器代码:
import { SAVE_SEARCH } from '../actions/index';
export default function (state = [], action) {
switch (action.type) {
case SAVE_SEARCH:
const o = {};
o[action.payloadOne] = action.payloadTwo;
return [...state, o];
default:
return state;
}
}
结果:
在对象字面量中,键只能是字符串字面量(值可以是对象引用):{"someKey": object.property}
但是,您可以使用对象引用或函数 return 值作为使用数组表示法的对象键(但它仍然必须是字符串):
let o = {};
o[action.payloadTwo] = action.payloadOne;
return [...state, o];
在 ES6 中你可以直接使用: return [...state, { [action.payloadTwo]: action.payloadOne] }];