我是react redux的新手。我正在尝试使选择所有的复选框功能与个人的复选框选择。选中所有单个复选框后,需要选中SelectAll复选框。我已经花了很多时间来做这件事,但我正在走错地方。
Action.js:-
const SELECT_CHECKBOX = "SELECT_CHECKBOX";
const SELECT_ALL_CHECK_BOX = "SELECT_ALL_CHECK_BOX";
export const selectCheckBox = (e,id) =>{
return{
type:SELECT_CHECKBOX,
event:e.target.checked,
checkBoxID:id
}
}
export const selectAllCheckBox = (e) =>{
return{
type: SELECT_ALL_CHECK_BOX,
event: e.target.checked,
}
}
减速器.js:-
const checkBoxSelects = {
selectAll: false,
checkBox : [
{label:"one",checked:false},
{label:"two",checked:true},
{label:"three",checked:false},
{label:"four",checked:false},
]
}
export const checkBoxReducer = (state = checkBoxSelects, action) => {
switch(action.type){
case SELECT_CHECKBOX:
let checkBox = [...state.checkBox];
checkBox[action.checkBoxID].checked = action.event
let selectAll = state.checkBox.every(item => item.checked === true) ? true : false
let newArray = {
...state,
selectAll,
checkBox,
}
return newArray;
default: return state;
}
}
export const selectAllReducer = (state = checkBoxSelects, action) =>{
switch(action.type){
case SELECT_ALL_CHECK_BOX:
state.selectAll = action.event
state.checkBox.forEach(item => item.checked = action.event)
return { ...state};
default: return state;
}
}
reducerIndex.js
import { checkBoxReducer,selectAllReducer } from './reducer';
import { combineReducers } from 'redux';
const rootReducers = combineReducers({
checkBoxHandler : checkBoxReducer,
selectAllState: selectAllReducer,
})
Container.js:-
import React from 'react'
import {selectCheckBox, selectAllCheckBox } from './action/index'
import { connect } from 'react-redux';
function CakeContainer(props){
return(
<>
<div>
<div>
<input
type="checkBox"
checked={props.slectAll}
onChange={(e) => props.selectAllFn(e)}
/>
<label>select ALL</label>
</div>
{props.checkBoxData.map((item,i) => {
return (
<div>
<input
type="checkbox"
checked={item.checked}
onChange = {(e) => props.onChangeSelect(e,i)}
/>
<label>{item.label}</label>
</div>
)
})}
</div>
</>
)
}
const mapStateToProps = (state) =>{
return{
checkBoxData: state.checkBoxHandler.checkBox,
slectAll : state.checkBoxHandler.selectAll,
}
}
const mapDispatchToProps = dispatch =>{
return{
onChangeSelect: (e,i) => dispatch(selectCheckBox(e,i)),
selectAllFn: (e) => dispatch(selectAllCheckBox(e)),
}
}
export default connect(
mapStateToProps,
mapDispatchToProps
)(CakeContainer)
export default rootReducers;
在您的Reducer.js
中,您设置状态的方式在我看来是不正确的。现在两个组件的原始状态都是
{
selectAll: false,
checkBox : [
{label:"one",checked:false},
{label:"two",checked:true},
{label:"three",checked:false},
{label:"four",checked:false},
]
}
这意味着在你使用combineReducers
后,你的商店的最终形状会看起来像
{
checkBoxHandler: {
selectAll: false,
checkBox : [
{label:"one",checked:false},
{label:"two",checked:true},
{label:"three",checked:false},
{label:"four",checked:false},
]
},
selectAllState: {
selectAll: false,
checkBox : [
{label:"one",checked:false},
{label:"two",checked:true},
{label:"three",checked:false},
{label:"four",checked:false},
]
}
}
我相信这不是你想要的。此外,请添加更多关于您想要实现的目标的描述。