根据索引反应redux更新数组

时间:2019-03-10 02:07:14

标签: javascript reactjs redux react-redux

我正在使用react学习redux。我正在尝试基于按钮单击来更新数字数组。我特别想基于导入的json文件在特定索引处更新计数器。

import React, { Component } from 'react'
import { connect } from 'react-redux'
import { upVote, downVote } from '../store/actions/voteAction';

class Voter extends Component {
    render() {
        const { count, upVote, downVote, id} = this.props
        return (
            <div>
                <button onClick={() => upVote(id)}>+</button>
                The count is {count[id]}
                <button onClick={() => downVote(id)}>-</button>
            </div>
        )
    }
}

const mapDispatchToProps = dispatch => ({
    upVote: (payload) => dispatch(upVote(payload)),
    downVote: (payload) => dispatch(downVote(payload))
  });

const mapStateToProps = (state) => ({
    count: state.vote.count

})
export default connect(mapStateToProps, mapDispatchToProps)(Voter);

我认为我的问题在于如何传递和更新减速器中的有效载荷。

import {UP_VOTE,DOWN_VOTE} from '../actions/actionTypes'
import Mice from './../../imports/mice'
const initialState = {
    count: new Array(Mice.length).fill(0)
}


const voteReducer = (state=initialState, action) => {
    const id = action.payload
    switch(action.type){
        case UP_VOTE:
            return{
            ...state, count: state.count[id] + 1
            }
        case DOWN_VOTE:
            return{
            ...state, count: state.count[id] - 1
            }
        default:
            return state
    }

}

export default voteReducer;

我更新了数组,但是每个索引仍在变化,看来我仍在对count数组而不是其中的索引进行突变。

我已将所有代码上传到CodeSandbox进行查看和试验: CodeSandbox Link

感谢阅读

1 个答案:

答案 0 :(得分:1)

使用map方法创建一个新数组,添加更改一个元素。 Redux开关将为:

switch (action.type) {
  case UP_VOTE:
    return {
      ...state,
      count: state.count.map((vote, i) => (i === id ? vote + 1 : vote))
    };
  case DOWN_VOTE:
    return {
      ...state,
      count: state.count.map((vote, i) => (i === id ? vote - 1 : vote))
    };
  default:
    return state;
}

这里的工作代码https://codesandbox.io/s/74pmomo42j