reactjs - 渲染发生在使用 useEffect 的请求之前
问题描述
我需要在渲染之前提出请求。请求数据将以 redux 状态存储。因为它是我的 App.js,它包含应用程序的必要路由。但是,路由的呈现发生在 useEffect 中发出请求之前。有谁能够帮助我?在渲染路由或其他任何内容之前,我需要以 redux 状态保存的请求数据。
应用程序.js
const App = () => {
const dispatch = useDispatch()
const setData = (data) => dispatch(actions.setData(data))
const fetchData = async () => {
await axios.get('https://link-api.com/')
.then((response) => {
console.log(response.data)
setData(response.data)
})
.catch(function (error) {
console.log(error);
})
}
useEffect(() => {
fetchData();
}, []);
return (
<Router>
<Header />
<Switch>
<Route path="/page4/:id" component={Page4} />
<Route path="/page3" component={Page3} />
<Route path="/page2" component={Page2} />
<Route path="/" component={Home} />
</Switch>
</Router>
);
}
export default App
主页.js
const Home= () => {
const data = useSelector(state => state.myReducers.data)
useEffect(() => {
console.log("data")
}
}, []);
return (
<>
//view_home
</>
)
}
export default Home
示例:在这种情况下,Home.js 的useEffect中插入的日志甚至出现在App.js中插入的日志之前
解决方案
如果您必须在渲染之前获取某些东西 - 考虑条件渲染。例如添加一个保持加载状态的新状态。最初将其设置为 true,当获取数据时 - 将其设置为 false。当它是错误的 - 渲染你需要的任何东西。
推荐阅读
- reactjs - 使用 Jest 进行 React 快照测试,子组件如何从父组件调用函数?
- excel - 检查单元格是否为文本,如果是,则删除行
- git - 如何在改编文件上使用 git?
- c# - 我正在尝试将奖励视频添加到我的游戏中,但奖励视频活动不起作用
- javascript - API 网关无法启用 CORS
- python - 我使用了朴素贝叶斯分类器,但现在我想使用 SVM 分类器,怎么办?
- html - responsive Masonry layout component not resizing according to the viewport
- json - How can I view this Json in tableView by id's
- flutter - flutter desktop build fails with `com.apple.xcode.tools.swift.compiler`
- angular - 带有客户注入器的动态组件传递 @self 依赖项