【发布时间】:2019-04-11 16:30:48
【问题描述】:
我目前正在修改我对 redux 和 react 的理解。 React 组件正在工作,并且我有一个 knex 数据库设置。我有一个使用以下语法的减速器。
import { FETCH_POSTS, NEW_POST } from '../actions/types';
const initialState = {
items: [],
item: {}
}
export default function(state = initialState, action) {
switch (action.type) {
case FETCH_POSTS:
return {
...state,
items: action.payload
};
case NEW_POST:
return {
...state,
item: action.payload
};
default:
return state;
}
}
这是我得到的一个错误。它似乎不喜欢扩展运算符。
bundle.js:445 Uncaught Error: Module build failed (from ./node_modules/babel-loader/lib/index.js):
SyntaxError: C:/workspace/study-related-projects/apistudy7112018/1.0/client/reducers/postReducer.js: Unexpected token (18:8)
它不喜欢我当前使用的语法,该语法来自 Traversy Media here 的此视频教程。导师实现中间件的方式与我的做法不同,但认为这不是问题。所以为了以防万一,我决定在减速器中像这样推送到 items 数组:
import { FETCH_POSTS, NEW_POST } from '../actions/types';
const initialState = {
items: [],
item: {}
}
export default function(state = initialState, action) {
switch (action.type) {
case FETCH_POSTS:
return state.items.push(action.payload)
default:
return state;
}
}
用展开运算符代替返回对象。
然后在react中的componentWillMount()函数中调用dispatch..
结果很好,但是现在映射数组以打印出组件中的数据变得更加困难。
如果我通过控制台记录 this.props.payload.posts,我会收到这些项目,但我不确定我是否可以访问它,因为帖子之后的下一个数组没有名称,只有数字 0。我尝试了 this.props.payload。帖子[0],但这似乎不起作用。这给我使用 map 数组函数映射数据带来了麻烦。
一般来说,如果一切顺利,我就可以使用 mapToProps 函数,那么:
this.props.items.posts.map(post) => {
return post.name
})
但是我在这两个解决方案中遇到了麻烦。这个问题是因为我试图实现一种不同的使用 redux 的方式,而不是我以前习惯的方式。这都是为了我自己的学习和训练。
谁能帮我理解这两个问题?一个是,javascript 不喜欢我正在使用的扩展运算符语法并吐回该错误。其次,尝试通过 items 数组获取原始数据。 如果有人可以帮助我,我将不胜感激。谢谢。
编辑:我可能会稍微建立一个 git repo,以便每个人都可以看到我正在处理的代码。
【问题讨论】:
-
您问题中发布的代码不会导致我的构建失败。如何概述您的代码向我表明您正在使用记事本或其他东西来编辑您的代码。也许您可以使用 vscode 之类的东西更容易地发现语法错误。此外,你不应该在你的 reducer 中改变状态,所以你不应该在数组中推送项目。
-
谢谢。我正在使用vscode,除了reducer,其他一切都在工作。还要感谢您提到不要改变状态,我会记住这一点。我应该提一下,我过去已经设法创建了一个 reducer,但它没有扩展运算符,所以我这次尝试使用扩展运算符。
-
在您的原始减速器中,您在一种情况下分配给
items,在另一种情况下分配给item,这与错误消息相结合,告诉您错误在第18行。我建议您需要在第 18 行使用items。 -
能否添加 git repo 以便我们查看代码?
-
你好。我的时间已经不多了,但我仍然打算上传一个精简版,因为这仍在进行中。非常感谢。
标签: javascript reactjs redux