reactjs - 有没有办法速记 useSelector 而不是导致不必要的渲染?

标签 reactjs redux

考虑这两个调用

const loading = useSelector((state) => state.example.loading); 
const { loading } = useSelector((state) => state.example);

const { loading } = useSelector((state) => state.example); 会使组件在示例切片中的其他变量发生变化时导致不必要的渲染。这一个 const loading = useSelector((state) => state.example.loading); 不会因为它只获取 loading 变量。

在我正在清理的一个应用程序中,一个小组成员写了 const { var1, var2, var3....var50 } = useSelector((state) => state.example); 和它会在整个应用程序中造成不必要的渲染。而不是重写

const var1 = useSelector((state) => state.example.var1);
const var2 = useSelector((state) => state.example.var2);
...

有没有办法在不引起渲染的情况下简写这个?

Playground 示例:

https://codesandbox.io/s/cool-dew-7pfclw?file=/src/Header.js

最佳答案

是也不是。您可以创建一个包含您实际需要的所有值的对象,然后使用与您的缩减器进行浅比较以确保它不会过于频繁地重新呈现。

它的代码可能更少,但老实说我不确定它是否更具可读性。

您还可以使用代理查看其他选择器库以跟踪何时更新。 there are some alternative candiates mentioned in the redux docs ,您可能对 proxy-memoize 感兴趣。

关于reactjs - 有没有办法速记 useSelector 而不是导致不必要的渲染?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72372144/

相关文章:

javascript - 在react js中渲染具有n个级别的目录结构数据

reactjs - intl.formatMessage 不起作用-react-intl

javascript - Redux Reducer 正在返回一个 [Object Object] ,但是我想要字符串?

javascript - 图像未在 reactjs 中加载

reactjs - 如何将X、Y平移到某个坐标而不是相对点?

javascript - React.js - 传递函数 "not a function"错误

reactjs - 从 hashHistory React-router-redux 中删除 queryKey

reactjs - React js编译错误符合3点

javascript - 代码会随着时间降低浏览器性能

typescript - 如何在 Typescript 中编写严格要求其参数的函数类型