react-redux使用useSelector获取数据导致组件重复渲染的问题

当使用React-Redux的useSelector钩子从store获取数据时,即使组件未使用变更的数据,store变化也会导致组件重复渲染。这是因为默认的浅比较策略。为避免这种情况,可以传递一个比较函数作为useSelector的第二个参数,如shallowEqual,以减少不必要的重渲染。
摘要由CSDN通过智能技术生成

现象:通过redux中的hooks – useSelector 获取store中的数据时,只要store中的数据发生了改变,即使组件中并没有获取修改的数据,组件也会进行重新渲染。

原因:是因为useSelector中默认使用的是 === 来判断两次获取的数据结果是否相同, 如果我们返回的是一个新对象(如果返回的是基本数据类型,则不存在该问题),那么每次比较结果都为false,导致了很多不必要的re-render。如下:

const _obj = useSelector((store: any) => ({
         
  aaa
React-Redux是一个用于在React应用程序中管理状态的库。它结合了ReactRedux,使得在React组件使用Redux变得更加简单。 要使用React-Redux,首先需要安装它: ``` npm install react-redux ``` 然后,在你的应用程序中引入所需的模块: ```jsx import React from 'react'; import { Provider, useDispatch, useSelector } from 'react-redux'; import { createStore } from 'redux'; // 创建一个Redux store const store = createStore(reducer); // 创建一个React组件 const App = () => { // 使用useDispatch和useSelector钩子来访问Redux store const dispatch = useDispatch(); const state = useSelector(state => state); // 渲染组件 return ( <div> <h1>Hello React-Redux!</h1> <button onClick={() => dispatch({ type: 'INCREMENT' })}>Increment</button> <p>Count: {state.count}</p> </div> ); }; // 渲染组件并将Redux store传递给应用程序 ReactDOM.render( <Provider store={store}> <App /> </Provider>, document.getElementById('root') ); ``` 在上面的示例中,我们首先创建了一个Redux store,然后使用`useDispatch`和`useSelector`钩子来访问Redux store。`useDispatch`用于触发action,`useSelector`用于选择需要的state。然后,在组件中,我们可以通过`dispatch`函数来分发action,以更新状态。最后,我们使用`Provider`组件Redux store传递给整个应用程序。 这只是React-Redux的基本用法,它还提供了更多的功能和API来帮助你更好地管理状态。你可以参考React-Redux的官方文档来了解更多用法和示例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值