Javascript 在React Redux中的数组中添加一个元素
我有一个项目,其中我使用了Javascript 在React Redux中的数组中添加一个元素,javascript,reactjs,redux,react-redux,Javascript,Reactjs,Redux,React Redux,我有一个项目,其中我使用了react-redux,我有一个reducer,它应该在数组中添加一个元素并返回新数组。我怎么能做到 /*----减速器----*/ 案例变更事件用户: 返回{…状态,用户:有效负载}; /*----这是我绝望的尝试----*/ userClickHandler(){ const{id,homefool,avatarUrl,login}=this.props; const user={id,homefool,avatarUrl,login}; this.props.c
react-redux
,我有一个reducer,它应该在数组中添加一个元素并返回新数组。我怎么能做到
/*----减速器----*/
案例变更事件用户:
返回{…状态,用户:有效负载};
/*----这是我绝望的尝试----*/
userClickHandler(){
const{id,homefool,avatarUrl,login}=this.props;
const user={id,homefool,avatarUrl,login};
this.props.changeEventUsers([…user]);//[]
this.props.changeEventUsers(this.props.event.users.push());//编号
}
直接在减速器中添加
从您的组件
this.props.changeEventUsers(newUser); // add the new user
在减速器中
return { ...state, users: [...state.users, payload] };
我假设“有效负载”包含来自操作的信息,默认情况下,
用户
数组使用空数组值初始化[]
我不确定我是否正确理解您,但根据我的理解,您的问题的解决方案如下所示:
case CHANGE_EVENT_USERS:
return { ...state, users: [ ...state.users, action.payload ] };
我更喜欢concat的语法。 在你的工作中,你应该:
case CHANGE_EVENT_USERS:
return users.concat(action.payload);
使用concat()
[1,2,3,4]
注意,我在这里使用const
来强调初始数组没有变异
上述方法的优点在于,它可以用于将操作链接在一起。result=initialArray.concat(..).filter(..).concat(..)代码>
(其中。
表示跳过的代码详细信息)
您还可以使用concat
,将数组作为参数传入:
newArray=concat(initialArray,[elementToadd])
或者使用es7扩展运算符语法进行数组连接:
newArray=[…initialArray,elementToAdd,…[5],[6]]代码>
[1,2,3,4,5,6]]
使用…
将所提供数组的各个元素发送到新数组中的元素;如果没有点,提供的数组本身就是元素
因此,在您的案例中,所讨论的行可以写为:我找到了我的解决方案:
this.props.changeEventUsers([...this.props.event.users, user]);
使用push方法array@Hushme,也在我分配的孔数组的初始状态中进行了尝试,这就是为什么我尝试不处理reducer@RamzanChasygov试试上面的例子。您应该将整个数组保存在reducer中,并且只在那里操作它。这就是减速器的用途。您不应该在react组件内部执行操作。因此,在定义初始状态的减速机开始时,使用用户定义它:[]
,后续添加应通过更改事件\u用户
操作在初始状态下,我需要使用对象,用户
就是其中一个关键
this.props.changeEventUsers([...this.props.event.users, user]);