【发布时间】:2020-04-09 20:10:10
【问题描述】:
我一直在获取上下文数据。
我有一个上下文和一个使用其数据的组件。
我需要在我的组件中获取 API 调用成功时上下文变量的更新数据。
那么我该怎么做呢? 这是我尝试过的。
context.js
import React, { useState, createContext,useEffect } from 'react';
import {getData} from './actionMethods';
const NewContext = createContext();
function newContextProvider(props) {
const [dataValue, setData] = useState([])
useEffect(() => {
const fetchMyData = async () => {
const dataValue = await getData(); // this is an API call
setData(dataValue)
};
fetchMyData();
}, []);
return (
<NewContext.Provider
value={{
state: {
dataValue
},
actions: {
}
}}
>
{props.children}
</NewContext.Provider>
);
}
const newContextConsumer = newContext.Consumer;
export { newContextProvider, newContextConsumer, newGridContext };
myComponent.js
import React, { useState, useContext } from 'react'
import context from './context'
import deleteAPI from './actionMethods'
function myComponent(props) {
const id= 10
const {state,actions} = useContext(context)
deleteAPI(id).then(res => {
if (res){
// what should I write here to get the updated Data from the context which will call an API to get the updated data.
}
})
}
任何帮助都会很棒。
谢谢。
【问题讨论】:
-
你的 context 只会调用一次,因为 context 的 useEffect 中没有 deps 数组。您能否解释一下 componentDidMount 上的工作流程,您需要调用一个 api 并将该数据填充到您的组件中,api 调用将在上下文中发生,您需要获取该数据并在组件中呈现。这就是你要找的东西
-
完全正确.. 所以基本上我有 10 个存储在 Context 变量中的列表。当我从我的组件调用删除列表 API 时,我应该通过在删除 API 调用成功时调用 API 来获取 9 个列表(更新的列表)数据。那我该怎么做呢?
-
所以我会再回忆一次,最初它会显示 10 个列表,然后单击每个列表附带的 del 按钮,它将从上下文中删除该项目并显示 9 个列表项。因此上下文组件将第一次调用数据并获取 10 个项目并在子组件中渲染 10 个项目,单击 del 按钮它将通过从上下文中找到 id 来删除,剩下的 9 个列表项将被渲染。我说的对吗!
-
yes.. 所以基本上当页面加载时.. API 将从上下文中调用,这将获取列表,比如说 10。所以在删除 1 个列表后,将再次调用 API 来获取最新列表
-
我认为 alvaro 已经给出了解决方案,如果您需要进一步了解,请告诉我
标签: reactjs react-hooks react-context