React Prevent 在页面更改时重新获取
React Prevent re-fetching on page changing
我目前正在开发一个 React 应用程序,该应用程序从我的后端获取一些内容,结果非常繁重。我的意图是让组件保持活动状态,并防止每次用户从一个页面切换到另一个页面时重新呈现。目前我正在获取所有数据并使用 react-redux 和 thunk 存储它。
我想通过单击按钮保留刷新选项。
我试过将组件包装在 React.memo 组件中,但没有成功。
这是我的代码,以防你能帮助我:
这是我不想重新渲染的组件,除非刷新状态发生变化:
import React, { useEffect, useState } from "react";
import { useDispatch, useSelector } from "react-redux";
import { getNFTs } from "../../actions/NFT";
export const LandList = React.memo(() => {
const { gettingNFTs, NFTs } = useSelector((state) => state.NFT);
const [refresh, setRefresh] = useState(0);
const dispatch = useDispatch();
useEffect(() => {
dispatch(getNFTs());
}, []);
return (
<div>
<h2>LandList</h2>
{gettingNFTs ? <p>getting nfts...</p> : <p>Done</p>}
</div>
);
});
这是我对商店的操作(我在这里使用 thunk):
export const getNFTs = () => {
return async (dispatch) => {
dispatch(getNFTsAction());
const resp = await fetchWithoutToken("marketplace");
const body = await resp.json();
dispatch(finishGetNFTsAction(body.publishedLands));
console.log(body);
};
};
const getNFTsAction = () => ({
type: types.NFTsGetStart,
});
const finishGetNFTsAction = (NFT) => ({
type: types.NFTsGetFinished,
payload: NFT,
});
如有任何帮助,我们将不胜感激!
你可以使用 redux 或 context hook 来做,创建一个全局标志并在第一次成功请求后更改它,并在 useEffect hook 中创建一个条件
export const LandList = React.memo(() => {
const { gettingNFTs, NFTs } = useSelector((state) => state.NFT);
const [refresh, setRefresh] = useState(0);
const dispatch = useDispatch();
useEffect(() => {
// here is the global variable or property , check it before your dispatch
if(!fetched){
dispatch(getNFTs());
}
}, []);
return (
<div>
<h2>LandList</h2>
{gettingNFTs ? <p>getting nfts...</p> : <p>Done</p>}
</div>
);
});
我目前正在开发一个 React 应用程序,该应用程序从我的后端获取一些内容,结果非常繁重。我的意图是让组件保持活动状态,并防止每次用户从一个页面切换到另一个页面时重新呈现。目前我正在获取所有数据并使用 react-redux 和 thunk 存储它。
我想通过单击按钮保留刷新选项。
我试过将组件包装在 React.memo 组件中,但没有成功。
这是我的代码,以防你能帮助我:
这是我不想重新渲染的组件,除非刷新状态发生变化:
import React, { useEffect, useState } from "react";
import { useDispatch, useSelector } from "react-redux";
import { getNFTs } from "../../actions/NFT";
export const LandList = React.memo(() => {
const { gettingNFTs, NFTs } = useSelector((state) => state.NFT);
const [refresh, setRefresh] = useState(0);
const dispatch = useDispatch();
useEffect(() => {
dispatch(getNFTs());
}, []);
return (
<div>
<h2>LandList</h2>
{gettingNFTs ? <p>getting nfts...</p> : <p>Done</p>}
</div>
);
});
这是我对商店的操作(我在这里使用 thunk):
export const getNFTs = () => {
return async (dispatch) => {
dispatch(getNFTsAction());
const resp = await fetchWithoutToken("marketplace");
const body = await resp.json();
dispatch(finishGetNFTsAction(body.publishedLands));
console.log(body);
};
};
const getNFTsAction = () => ({
type: types.NFTsGetStart,
});
const finishGetNFTsAction = (NFT) => ({
type: types.NFTsGetFinished,
payload: NFT,
});
如有任何帮助,我们将不胜感激!
你可以使用 redux 或 context hook 来做,创建一个全局标志并在第一次成功请求后更改它,并在 useEffect hook 中创建一个条件
export const LandList = React.memo(() => {
const { gettingNFTs, NFTs } = useSelector((state) => state.NFT);
const [refresh, setRefresh] = useState(0);
const dispatch = useDispatch();
useEffect(() => {
// here is the global variable or property , check it before your dispatch
if(!fetched){
dispatch(getNFTs());
}
}, []);
return (
<div>
<h2>LandList</h2>
{gettingNFTs ? <p>getting nfts...</p> : <p>Done</p>}
</div>
);
});