Я использую React с react-redux и redux-actions.
У меня есть следующий редуктор, который постоянно говорит мне
unexpected token, expected ","
но я не знаю почему.
comments.js (reducer):
import { handleActions } from "redux-actions";
import {
GET_COMMENTS,
SET_COMMENTS,
ADD_COMMENT
} from "../constants/actionTypes";
export default handleActions(
{
[GET_COMMENTS]: (state, action) => state,
[ADD_COMMENT]: (state, action) => {
const comments = {
...state.comments,
action.payload
};
return {
...state,
comments
};
},
[SET_COMMENTS]: (state, action) =>
Boolean(action.payload) ? action.payload : state
},
{}
);
Действие, вызывающее проблемы, - ADD_COMMENT. Я пробовал это следующими способами:
[ADD_COMMENT]: (state, action) => {
...state,
comments: {
...state,
action.payload
}
}
или
[ADD_COMMENT]: (state, action) => ({
...state,
comments: {
...state,
action.payload
}
})
а также:
[ADD_COMMENT]: (state, action) => {
return {
...state,
comments: {
...state,
action.payload
}
}
}
Я не могу понять, почему мой код неверен, мой линтер в атоме говорит, что это точка между действием и полезной нагрузкой, но я не уверен.
Создатель действия просто возвращает тип ADD_COMMENT и полезную нагрузку отдельного комментария в следующем формате:
{
"id": 3,
"parent": 1,
"author": "admin",
"author_is_staff": true,
"content": "This is a test comment using the API rather than the Admin page, with author specified, with view changed"
}





Вы пытаетесь включить переменную в объект без ключа:
// This is fine
const comments = {
...state.comments
}
// This is not
const comments = {
actions.payload
}
// Possible alternative:
const comments = {
...state.comments,
payload: actions.payload
}
// Or if you want to destructure `actions.payload`:
const comments = {
...state.comments,
...actions.payload
}
Вы были правы. Мне удалось решить проблему, сначала нормализовав данные, а затем деструктурируя actions.payload в новое состояние комментариев.
Ах. Я сейчас в классе, но когда выйду, я попробую. Я определенно думаю, что вы правы, теперь, когда я это слышу, это имеет большой смысл. state.comments - это объект объектов, поэтому я считаю, что мне нужно деструктурировать actions.payload в комментарии. Мы проверим и свяжемся с вами.