选择器是否会导致 Redux 工具包中不相关组件的重新渲染?

Do selectors cause re-rendering on unrelated components in Redux toolkit?

我正在研究 Redux 工具包并做了一个简单的项目来更好地理解它的概念。

function App() {
 //..
 return(
  <UserList /> // uses submittedUserSelector
  <UserInformation /> // uses selectedUserSelector
 );
}

基本思路是,您可以将用户添加到 UserList 或 select 列表中的用户,该列表将显示在 UserInformation 中。已提交和 selected 用户均由同一商店中的不同 reducer 管理。

export const rootReducer = combineReducers({
    form: formReducer, // have submitted user selector
    user: userReducer // have selected user selector
});

// formReducer.tsx
 export const submittedUserSelector = (state:RootState)=>state.form.submittedUser; //object
// selectedUserReducer.tsx
 export const selectedUserSelector = (state:RootState)=>state.user.selectedUser; //object

According to the official documentation 我引用:

When an action is dispatched, useSelector() will do a reference comparison of the previous selector result value and the current result value. If they are different, the component will be forced to re-render. If they are the same, the component will not re-render.

所以我期待当我 selected 一个用户在 userReducer 中调度一个动作 也会导致重新渲染 UserList(因为 submittedUserSelector returns 一个对象)。然而,这并没有发生。

为什么? redux-toolkit 是否找出树中的哪些组件正在使用特定的 selector 并且只评估那些组件?是在文档的某处吗?

选择器将在每次状态更改时调用,并且 只有 如果选择器结果从上次渲染发生变化,则会导致组件重新渲染 - 因此通常,不相关的组件不会被重新渲染。

请记住,一般的 React 组件渲染仍然适用 - 如果父组件重新渲染,所有子组件都将被重新渲染。

虽然这与 redux-toolkit 无关 - 这是 react-redux 挂钩的正常行为。参见 https://react-redux.js.org/api/hooks