Eri*_*dán 3 reactjs react-hooks
要基于静态对象创建上下文,我使用以下代码:
import React, { createContext } from 'react';
const user = {uid: '27384nfaskjnb2i4uf'};
const UserContext = createContext(user);
export default UserContext;
Run Code Online (Sandbox Code Playgroud)
这段代码工作正常。
但是如果我需要在获取数据后创建上下文,我使用以下代码:
import React, { createContext } from 'react';
const UserContext = () => {
// Let's suppose I fetched data and got user object
const user = {uid: '18937829FJnfmJjoE'};
// Creating context
const context = createContext(user);
// Returning context
return context;
}
export default UserContext;
Run Code Online (Sandbox Code Playgroud)
当我调试选项 1 时,console.log(user)返回对象。相反,选项 2console.log(user)返回undefined。我缺少什么?
import React, { useEffect, useState, useContext } from 'react';
import UserContext from './UserContext';
const ProjectSelector = (props) => {
const user = useContext(UserContext);
console.log(user);
return(...);
}
export default App;
Run Code Online (Sandbox Code Playgroud)
我建议的一件事是将这个逻辑转移到反应组件本身。您需要如何使用 Provider,在其中将值设置为消费者需要消耗的值。useEffect 是执行异步更新的好方法,就像您的要求一样。因此,使用状态变量作为提供程序的值。在 useEffect 中,您获取数据并更新状态变量,这反过来将更新上下文值。以下是代码
UserContext.js
import { createContext } from "react";
const UserContext = createContext();
export default UserContext;
Run Code Online (Sandbox Code Playgroud)
应用程序.js
export default function App() {
const [user, setUser] = useState();
useEffect(() => {
console.log("here");
fetch("https://reqres.in/api/users/2")
.then(response => {
return response.json();
})
.then(data => {
setUser(data);
});
}, []);
return (
<div className="App">
<UserContext.Provider value={user}>
<DummyConsumer />
</UserContext.Provider>
</div>
);
}
Run Code Online (Sandbox Code Playgroud)
虚拟消费者.js
import React, { useContext } from "react";
import UserContext from "./UserContext";
const DummyConsumer = () => {
const dataFromContext = useContext(UserContext);
return <div>{JSON.stringify(dataFromContext)}</div>;
};
export default DummyConsumer;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10008 次 |
| 最近记录: |