问题描述
在使用react-redux中,reducer的数据明明已经更改了,但是却不能触发组件的render函数,页面也没有同步更新。看了网上的一些答案,才知道在reducer是一个 纯函数 不能修改参数preState ,并且当你返回preState时,react-redux并不知道数据已经更改(preState是对象引用,始终指向一个地址),而我在这里对preState进行了push操作,并把操作后的preState返回。

什么是纯函数

改正后的代码如下:
改后的代码

写在最后:若有误,请指正。

react-redux 是一种 react 官方推出的 redux 管理工具 他的好处就是 我们不需要再用store.subscribe去监听 数据 变化再去重新渲染项目了 项目自己会检查状态修改并重新渲染界面。简单说 就是每次要改对象 数据 前 先将对象深拷贝一次 react 项目就能检查到 并重新渲染界面了。确实问题就是 你的对象如果没有深拷贝 react 项目检查不到你的 数据 改变 了。但很多人都会遇到用一个对象 明明 数据 改了 但界面就是没有重新渲染。这个问题要修改 counter。 我想实现的是一个组件能 改变 另一个组件button上面的text的功能,查阅了很多资料,决定用 redux 来实现,因为两个组件并不是父子组件的关系,套用起来会很麻烦。 看网上很多人 页面 渲染不成功是直接在reducer里修改了state的 ,从而导致 页面 重新渲染,我尝试 使用 ...object后, 页面 还是没有重新渲染。 正确修改后的reducer: const button_text_reducer=(state,action)=>{ switch(action.type){ arr.splice(index,1) setLists(arr); 这里要根据 react 的渲染机制源码,因为 react 会判断旧状态和新状态是否有变化,如果没有变化就不渲染,所以要 改变 地址告诉render 是新状态要重新渲染 原文链接:https://blog.csdn.net/w this.props.dispatch(updateData(value)) // 1 console.log(this.props.data)//2 状态没有 更新 setTimeout(() => //3 状态发生了 更新 ) 于是猜想 redux 执行action应该是 同步 的,但是reducer中将新状态返回 更新 store数... 如果 页面 开始显示依赖的异步 数据 ,而不是用户操作触发的,没有渲染异步内容时,看到部分人采用setTimeout延时渲染的方法,这是不准确而且是错误的。这里给出的一个方法,是添加所依赖的 数据 下渲染的判断条件。在没有拿到该异步 数据 前渲染为空,之后根据这个 数据 判断为真时渲染出有内容的 页面 。 举一个例子,contents,这个 是根据 redux 插件连接state和dispatch,通过在componentWillMount() 钩子中调用this.props.getPageContents()得到的 ,这个方法是异步 遇到的问题 import { ADD_PERSON, DELETE_PERSON} from '../constant' export default function personReducer(preState = {personArr: []}, action) { const {type, data} = action let n