首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >React Context api,我无法从context访问对象

React Context api,我无法从context访问对象
EN

Stack Overflow用户
提问于 2020-10-14 03:32:06
回答 1查看 347关注 0票数 0

我开始学习React,我正在尝试从api中检索数据,这些数据是一个带有base, date & rates字段的对象,我可以打印和注销base & date,但rates不是一个对象。

console.log给出了未定义的,当尝试迭代时,显然是对象不存在,但在DevTools中我可以看到正常数据

感谢您的帮助和问候

上下文:

代码语言:javascript
复制
export const ExchangeProvider = props => {
const [lastestExchanges, setLastestExchanges] = useState({})

const fetchLastestExchange = async () => {
    try {
        await fetch(`https://api.exchangeratesapi.io/latest`).then(data => data.json()).then(data => setLastestExchanges(data))
    } catch (err) {
        console.log(err)
    }
}

useEffect(() => {
    fetchLastestExchange()
}, [])

return (
    <ExchangeContext.Provider value={[lastestExchanges, setLastestExchanges]}>
        {props.children}
    </ExchangeContext.Provider>
)
}

用法:

代码语言:javascript
复制
import React, {useState, useContext} from "react";
import {ExchangeContext} from "../ExchangeContext";

function HomeView() {
    const [lastestExchange, setLastestExchange] = useContext(ExchangeContext)
    console.log(lastestExchange)
    return (
        <div className="container">
            <p>{lastestExchange.base}</p>
            <p>{lastestExchange.date}</p>
            {/*<p>{lastestExchange.rates['PLN']}</p>*/}
            <ul>
                {/*{Object.keys(lastestExchange.rates).map(key => <li>{lastestExchange.rates[key]}</li>)}*/}
            </ul>
        </div>
    )
}

export default HomeView

提供程序用法:

代码语言:javascript
复制
import React from 'react';
import HomeView from "./Views/HomeView";
import {
    BrowserRouter as Router,
    Switch,
    Route,
    Link
} from "react-router-dom";
import {ExchangeProvider} from "./ExchangeContext";

function App() {
    return (
        <ExchangeProvider>
            <div className="App container w-full flex h-full">
                <Router>
                    <Switch>
                        <Route path="/">
                            <HomeView/>
                        </Route>
                    </Switch>
                </Router>
            </div>
        </ExchangeProvider>
    );
}

export default App;
EN

回答 1

Stack Overflow用户

发布于 2020-10-14 03:40:14

您可以像这样简单地使用react上下文:

代码语言:javascript
复制
// src/ThemeContext.js
 
import React from 'react';
 
const ThemeContext = React.createContext(null);
 
export default ThemeContext;
代码语言:javascript
复制
// src/ComponentA.js
 
import React from 'react';
import ThemeContext from './ThemeContext';
 
const A = () => (
  <ThemeContext.Provider value="green">
    <D />
  </ThemeContext.Provider>
);
代码语言:javascript
复制
// src/ComponentD.js
 
import React from 'react';
import ThemeContext from './ThemeContext';
 
const D = () => (
  <ThemeContext.Consumer>
    {value => (
      <p style={{ color: value }}>
        Hello World
      </p>
    )}
  </ThemeContext.Consumer>
);
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64341973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档