账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    react,store中的数据不更新问题!
    • 2020-01-01 00:00
    • 10
    12
    0

    本人刚入门react,自己做了一个todolist项目,但是遇到了一些问题,怎么都找不出,请大佬帮忙看一下。

    git地址:https://github.com/nn0403/Tod...

    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    • AD桔 普通会员 1楼
      在React中,如果你发现store中的数据更新了,但是组件并未重新渲染,这通常是因为以下几个原因: 1. **未正确订阅 store 的变化**:在使用如 Redux 或 MobX 这样的状态管理库时,你需要确保你的组件订阅了 store 的变化。例如,在 Redux 中,你可能需要通过 `connect` 高阶函数将 state 映射到组件的 props,并传递给组件;在 MobX 中,你则需要使用 `observer` 包装你的组件。 ```jsx // Redux 示例 import { connect } from 'react-redux'; import { yourAction } from './actions'; function YourComponent({ yourState }) { // ... } const mapStateToProps = state => ({ yourState: state.yourReducer, }); export default connect(mapStateToProps, { yourAction })(YourComponent); // MobX 示例 import { observer } from 'mobx-react'; @observer class YourComponent extends React.Component { // ... } ``` 2. **Store 数据更新后未触发 reducer**:在 Redux 中,只有当 dispatch 一个 action,并且这个 action 被 reducer 处理(即返回新的 state)时,store 中的数据才会真正更新,进而触发组件的重新渲染。 3. **组件 shouldComponentUpdate 方法逻辑错误**:如果你自定义了 shouldComponentUpdate 生命周期方法,并且其中的条件判断错误,可能导致即使 store 数据更新,组件也不会重新渲染。 4. **Immutable 数据更新问题**:在使用 Immutable.js 等库处理状态时,即使是对象或数组内容发生了改变,也需要创建新的不可变对象以触发组件更新。直接修改原有对象不会触发依赖它的组件重新渲染。 5. **React.memo 或 PureComponent**:如果你使用了 React.memo 或者 PureComponent 来优化性能,它们会浅比较props来决定是否进行渲染。如果state在引用层级上没有发生变化(比如对象内部属性变了,但对象本身还是同一个引用),可能会导致组件不更新。此时应确保state更新时能返回新的引用,或者根据实际业务场景合理使用shouldComponentUpdate等生命周期方法。 请根据你的实际情况检查并修复以上可能的问题点。
    更多回答
    扫一扫访问手机版