Arrays Redux分派-从数组中删除项/数组长度输出不正确
我在Redux中有一个操作,它所做的一切就是删除硬编码数组中的最后一个项目,该数组包含3个项目 它工作正常,但我有第二个属性(dataLength),它计算数组的长度。在分派操作时,我希望从数组中删除最后一项,同时更新数组长度 所发生的事情是,该项从数组中删除,但长度(dataLength)在我再次分派该操作之前不会更新 所以我有两个问题:Arrays Redux分派-从数组中删除项/数组长度输出不正确,arrays,reactjs,redux,Arrays,Reactjs,Redux,我在Redux中有一个操作,它所做的一切就是删除硬编码数组中的最后一个项目,该数组包含3个项目 它工作正常,但我有第二个属性(dataLength),它计算数组的长度。在分派操作时,我希望从数组中删除最后一项,同时更新数组长度 所发生的事情是,该项从数组中删除,但长度(dataLength)在我再次分派该操作之前不会更新 所以我有两个问题: 我的dataLength属性设置为null,是否可以在初始状态下获取数组的长度 如何在第一次分派后立即更新dataLength属性 谢谢 减速器 const
const initialState = {
data: [
{
id: 0,
title: 'title 1'
},
{
id: 1,
title: 'title 2'
},
{
id: 2,
title: 'title 3'
}
],
dataLength: null
}
const data = (state = initialState, action) => {
switch(action.type) {
case 'DECREMENT_DATA':
return { ...state, data: state.data.filter((item) => item.id !== action.id), dataLength: state.data.length }
default:
return state;
}
}
export default data;
行动
export function decrement() {
return {
type: 'DECREMENT_DATA',
id: 2
}
}
组件
import React, { Component } from 'react';
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
import { decrement } from '../actions/decrement';
class Decrement extends Component {
render() {
return (
<button onClick={this.props.decrement}>Decrement -</button>
);
}
}
const mapStateToProps = ((state) => {
return {
data: state.data
}
});
const mapDispatchToProps = ((dispatch) => {
return bindActionCreators({
decrement
}, dispatch)
});
export default connect(mapStateToProps, mapDispatchToProps)(Decrement);
import React,{Component}来自'React';
从'react redux'导入{connect};
从“redux”导入{bindActionCreators};
从“../actions/decrement”导入{decrement};
类减量扩展组件{
render(){
返回(
减量-
);
}
}
常量mapStateToProps=((状态)=>{
返回{
数据:state.data
}
});
const mapDispatchToProps=((调度)=>{
返回bindActionCreators({
减量
},调度)
});
导出默认连接(mapStateToProps、mapDispatchToProps)(递减);
在减速机中,您没有正确更新长度,因为它是根据当前状态列表而不是筛选列表确定的
const data = (state = initialState, action) => {
switch(action.type) {
case 'DECREMENT_DATA':
const newList = state.data.filter((item) => item.id !== action.id)
return { ...state, data: newList, dataLength: newList.length }
default:
return state;
}
}
您应将此邮件退回:
case 'DECREMENT_DATA':
const updatedArray= state.data.filter((item) => item.id !== action.id)
return { ...state, data:updatedArray , dataLength: updatedArray.length }
原因是当您使用state.data.length时,您仍在访问旧的状态值很高兴能提供帮助:-)