在学习Redex做一个删除项目功能的时候,写出来代码之后调试的时候,在触发删除的时候,store虽然改变了,但是页面并没有发生相对应的变化。
这里打印出来的内容就是最后返回的state,打印出来的内容是已经改变后的state了,但是页面内容并没有改变。
-
原因
Store 会把两个参数传入 reducer: 当前的 state 和 action,所以不能直接修改state,redux会比较新旧state的值,直接修改state会导致store内部的也发生改变,那么新旧state也就没有发生变化。页面就不会重新渲染。 -
解决方法
1、Object.assign进行拷贝复制(这里也是用了的)
2、使用ES6拓展运算符…对store进行浅拷贝(这个就是造成我页面不渲染的原因)
修改之后:
- 注意:不要在reducer里面做以下操作
1、修改传入参数;
2、执行有副作用的操作,如 API 请求和路由跳转;
3、调用非纯函数,如 Date.now() 或 Math.random()。