【发布时间】:2021-04-09 14:20:32
【问题描述】:
在我的功能性反应组件中,我的 useEffect 钩子不会在初始渲染和引发错误时被调用,但如果我继续刷新它就会起作用。 我找不到解决办法。
function useQuery() {
return new URLSearchParams(useLocation().search);
}
function WatchMain({ watchVideo, videos, setLoading, fetchVideoById }) {
let query = useQuery();
let id = query.get("v");
const setTitle = (id) => {
videos.forEach((video) => {
if (video.id.videoId === id) {
document.title = video.snippet.title;
}
});
};
useEffect(() => {
console.log("in use effect");
setTitle(id);
setLoading();
fetchVideoById(id);
}, [id]);
return (
<WatchMainContainer>
{!watchVideo ? <Loading src={loadersvg} alt="loading" /> : <VideoData />}
</WatchMainContainer>
);
}
const mapStateToProps = (state) => ({
watchVideo: state.videos.watchVideo,
videos: state.videos.videos,
});
export default connect(mapStateToProps, { setLoading, fetchVideoById })(
WatchMain
);
我已经排除了进口
我正在使用 useQuery 来解析查询参数 id。 我的网址看起来像这样 http://localhost:3000/watch?v=1GQ9mH5Zzr0 id 可以在日志中看到。但是 useEffect 没有被触发。
【问题讨论】:
-
最好的办法就是制作一个中间件组件来处理加载数据和最初获取数据。
标签: javascript reactjs react-redux react-hooks use-effect