Redux reducer 提示 TypeError undefined after UI change

Redux reducer prompting TypeError undefined after UI change

我目前正在构建一个类似于 Reddit 的 Redux 应用程序。了解状态管理。

我现在遇到了一个我无法理解的问题,当我对 post 投票时,我可以看到 UI 正在改变(+1/-1 票)但是提示错误仅一秒钟。

Unhandled Rejection (TypeError): Cannot read property 'id' of undefined

我的组件结构如下

API 文件

export const submitPostVote = (option, id) => {
    return axios.post(`${API_URL}/posts/${id}`, {option}, { headers })
}

Action Creator(使用 redux-thunk)

export function postPostVote(option, id) {
    const request = API.submitPostVote(option, id)

    return (dispatch) => {
        request.then(({data}) => {
            dispatch({type: SUBMIT_POST_VOTE, payload: data})
        });
    };
}

减速器

export default function(state = {}, action) {
  const {payload} = action
  switch (action.type){
        case SUBMIT_POST_VOTE:
            return {...state, [payload.data.id]: payload.data}

使用它的组件

import { postPostVote } from '../actions';

<span
 className='fa fa-angle-up voteArrow'
 onClick={() => this.props.postPostVote('upVote', id)}
></span>

export default connect(null, {postPostVote})(PostComponent);

所以我试图传递 option(upVote || downVote) 以及一个 id 但我不明白为什么 returns 可以看到更改后的错误

非常感谢, 彼得

您在 action 中定义字段的方式与在 reducer 中使用 action 的方式似乎不匹配。

您将操作定义为 {type: SUBMIT_POST_VOTE, payload: data},但在 reducer 中,使用 action.payload.data.id。我假设 payload.data 实际上不会存在,而你真正需要的是 action.payload.id.