javascript - 页面刷新时 ContextProvider 不挂载

标签 javascript reactjs use-context

请查看 codesandbox 上的完整代码.

我的国家/地区 API 应用程序有两个路线组件-

<>
    <Header/>

    <Router>
        <Switch>
            <CountriesDataProvider>

                <Route path='/' exact component={HomeRoute} />
                <Route path='/detail/:countryName' component={DetailsRoute} />
                        
            </CountriesDataProvider>
        </Switch>
    </Router>
</>

当我在 HomeRoute 上单击一个国家/地区时,每个国家/地区的 DetailsRoute 会完美显示所有信息。但是,当发出直接 http 请求或刷新 DetailsRoute 时,我会看到此错误-

/src/comps/Details/DetailsRoute.jsx

Cannot read property 'borders' of undefined

它发生在线上-

const promises = country[0].borders.map(fetchNeighborName);

country[0] 是从 countriesData 中提取的,它似乎是 undefined-

const {countriesData} = React.useContext(CountriesDataContext);

这不是 BrowserRouter 的问题,因为 DetailsRoute 组件确实呈现但缺少信息。

直接 url 请求 被发送到 DetailsRoute 组件时,我不知道是什么逻辑错误导致它无法工作?请让我知道修复方法!

最佳答案

问题是,当您重新加载详细信息页面时,CountriesDataContext 中的响应尚未返回,因此 country 为空。解决问题的一种简单方法(通常是一种好的做法)是添加检查以确保数据存在:

async function resolveBorders() {
  // Add a condition to make sure you have the data you expect.
  if (country.length) {
    const promises = country[0].borders.map(fetchNeighborName);
    setBorderCountries(await Promise.all(promises));
  }
}

一定要将 country 添加到效果的依赖数组中,以便效果在响应返回时再次运行:

React.useEffect(() => {
  async function resolveBorders() {
    ...
  }

  resolveBorders();
}, [borderCountries, country]); // <-- Add `country` here

关于javascript - 页面刷新时 ContextProvider 不挂载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63936736/

相关文章:

javascript - 如何在 PHP Laravel 中为货币值设置自动数字 jquery?

javascript - 使用 Node.js 和 Postgresql 在没有回调的函数中调用数据库

javascript - 如何在 Apollo 中组合多个 fetchMore 函数?

node.js - Nodejs + ReactJS socket.io off/removeListener 不起作用

javascript - 将 JavaScript 拆分成小部分以添加到数组中

javascript - 转换时间 hh :mm:ss into GMT time format in Angular 2

javascript - Ruby on Rails 与 React "TypeError: Object(...) is not a function"错误

reactjs - 使用 React useContext 钩子(Hook)在调度调用后不更新 React 状态

javascript - 上下文返回未定义 - useContext

javascript - React useContext 返回未定义