javascript - 在 react-redux 中选择所有复选框功能
问题描述
我是 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,
})
Containet.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},
]
}
}
我相信这不是你想要的。还请添加更多关于您想要实现的目标的描述。
推荐阅读
- java - 带有路径变量的 RestTemplate GET 方法
- polymer - Polymer 3 升级 - 选择的铁页在 dom 中但不显示
- typescript - 为什么在对象键的类型声明中使用方括号?
- xml - 验证 XML 模式中的 xml:id 属性
- c# - Admob 测试 广告未在真实设备中显示?
- javascript - Javascript仅适用于第一个块?
- machine-learning - Kafka 流的最佳实践
- javascript - 正则表达式在两个天使大括号文本 << value >>j 之间查找值
- amazon-web-services - Amazon SNS 与 Firebase 定价
- c# - Unity播放暂停音频效果不佳