React.memo 与 react-router-dom useLocation()
React.memo with react-router-dom useLocation()
最近我发现我的 React 应用程序存在一些性能问题,经过一些研究我发现了 React Memo。一些训练示例正常工作,但是当将它连接到我的应用程序时它没有任何效果。我发现问题出在 useLocation 上。
const Table = React.memo(() => {
const location = useLocation();
return <div>something</div>
},(prevProps, nextProps) => {
return true //I dont want re-render this Component when parent component is re-rendered
})
没有 useLocation 它可以工作,但我需要这个位置,因为基于这个位置,更具体地说是基于来自这个位置的过滤器,我调用 API 数据。
像
const location = useLocation();
useEffect(() => {
dispatch(getData(location.search))
}, [location]);
有没有更好的解决方案或一些提示?
解决这个问题的方法是创建一个包装器,将位置作为道具传入。这样做会使 table 成为一个纯组件,并且只会在位置发生变化时重新呈现。
function TableWrapper(){
const location = useLocation()
return <Table location={location} />
}
然后 table 需要将位置作为道具
const Table = React.memo(({location}) => {
return <div>something</div>
})
最近我发现我的 React 应用程序存在一些性能问题,经过一些研究我发现了 React Memo。一些训练示例正常工作,但是当将它连接到我的应用程序时它没有任何效果。我发现问题出在 useLocation 上。
const Table = React.memo(() => {
const location = useLocation();
return <div>something</div>
},(prevProps, nextProps) => {
return true //I dont want re-render this Component when parent component is re-rendered
})
没有 useLocation 它可以工作,但我需要这个位置,因为基于这个位置,更具体地说是基于来自这个位置的过滤器,我调用 API 数据。 像
const location = useLocation();
useEffect(() => {
dispatch(getData(location.search))
}, [location]);
有没有更好的解决方案或一些提示?
解决这个问题的方法是创建一个包装器,将位置作为道具传入。这样做会使 table 成为一个纯组件,并且只会在位置发生变化时重新呈现。
function TableWrapper(){
const location = useLocation()
return <Table location={location} />
}
然后 table 需要将位置作为道具
const Table = React.memo(({location}) => {
return <div>something</div>
})