React JS:API 调用成功后获取上下文数据

2023-12-10

我一直在获取上下文数据。

我有一个上下文和一个使用其数据的组件。

我需要在我的组件中获取 API 调用成功时上下文变量的更新数据。

那么我该怎么做呢? 这是我尝试过的。

上下文.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.    
    }
  })
  
  
}

任何帮助都会很棒。

谢谢。


作为一个通用示例,一种选择是当应用程序加载到前端时从服务器获取数据。从那里您可以发送修改服务器数据的请求,同时更新本地版本。就像是:

  1. 获取数据并将其保存到本地存储:[{id: 0, name: 'first'},{id: 1, name: 'second'}]
  2. 向服务器发送请求修改数据。例如删除一个项目。id: 0
  3. 一旦服务器响应确认操作成功,您就可以修改本地存储中的数据。[{id: 1, name: 'second'}]

您可以使用 Redux 存储或 React Context 来处理数据。例如,使用上下文:

export const ItemsContext = createContext([]);

export const ItemsContextProvider = props => {
    const [items, setItems] = useState([]);

    const deleteItem = id => {
        deleteItemsAxios(id).then(() => {
            setItems(items => items.filter(item => item.id !== id));
        });
    };

    useEffect(() => {
        const fetchItems = async () => {
            const items_fetched = await fetchItemsAxios();

            if (items_fetched) {
                setItems(items_fetched);
            } else {
                // Something went wrong
            }
        };

        fetchItems();
    }, []);

    return (
        <ItemsContext.Provider
            value={{
                items,
                deleteItem
            }}
        >
            {props.children}
        </ItemsContext.Provider>
    );
};

我们定义一个将管理数据获取的组件。数据项位于状态内。当组件安装时,我们获取项目并将它们保存在状态中。如果我们想删除一个项目,我们首先调用相应的获取函数。一旦完成,如果成功,我们会更新状态并删除该项目。我们使用 React Context 来传递items数据,以及deleteItem功能,任何需要它们的组件。

如果您需要更多解释,请告诉我。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React JS:API 调用成功后获取上下文数据 的相关文章

随机推荐

  • C# 读取word文档

    我想阅读服务器中的word文档 doc和docx 服务器没有 安装了office 因此我不能使用com对象 也不能使用商业软件 有没有办法让我单独使用office工具 阅读word docs 2003年和2007年 不幸的是 没有很好的免费
  • SwiftUI - ForEach 删除转换始终仅应用于最后一项

    我正在尝试向我的动画添加删除动画ForEach 使得每个Card当移除时 其内部会扩展 这是我到目前为止所拥有的 问题是无论哪一个Card被按下 它是总是最后一个动画 有时 每张卡片内的文本都有奇怪的滑动 变形动画 这是我的代码 Ran i
  • 奇怪的“406 不可接受”错误

    当我尝试通过 Javascript 执行此操作时 我得到一个406 Not Acceptable error def show annotation Annotation find by id params id respond to do
  • 将(大量)零写入二进制文件

    这可能是一个愚蠢的问题 但我无法找到正确的答案 我想存储 不要问为什么 a 的二进制表示 2000 2000 2000 零数组写入磁盘 二进制格式 实现这一目标的传统方法是 with open myfile wb as f f write
  • 如何创建新的窗口按钮 PySide/PyQt?

    我在使用 Python 2 7 的 PyQt4 PySide 中使用 新窗口 功能时遇到问题 我连接了一个initNewWindow 函数 创建一个新窗口 一个操作并将其放入菜单栏中 曾经是桌面软件中的常见功能 新窗口不会弹出并关闭 而是会
  • Xcode 6 Interface Builder“无法打开编译的 nibs”错误,FiksuSDK

    我有一个使用 CocoaPods 在 Xcode 5 中运行良好的应用程序 当我在 Xcode 6 上打开应用程序并点击构建并运行时 我从 FiksuSDK 收到四个关于编译 nib 文件的错误 在侧面 它指出我没有查看它的权限 但点击它会
  • 选择栏被隐藏

    我已经添加了adjustPan in Manifest xml这里的文件是我的Activity tag in Manifest xml android name LoginActivity android configChanges ori
  • 典型的 IoC 容器用法 - 向下传递数据

    我最近开始使用IoC第一次使用容器 但我没有接受过使用它的最佳实践的教育 更具体地说我正在使用Unity在一个 C NET 项目中 我开始使用它 因为它附带Prism 我使用容器来解析 顶级 对象 并且它们根据容器获得注入的正确对象 但是
  • C# 通过拖动绘制线条

    如何像windows画图那样画一条线 单击固定第一个点 第二个点 和线 随鼠标移动 再单击固定线 int x 0 y 0 protected override void OnMouseMove MouseEventArgs e base O
  • 两个日期之间的 Pythonic 差异(以年为单位)?

    下面有更有效的方法吗 我希望将两个日期之间的年份差异作为单个标量 欢迎任何建议 from datetime import datetime start date datetime 2010 4 28 12 33 end date datet
  • 你如何知道 jQuery 函数何时返回 false?

    return false 似乎工作在submitHandler但我不知道为什么 function submitHandler post this attr action this serialize null script return f
  • iOS 8 Swift 音频播放完成时执行方法

    我正在 iOS 8 的 Swift 中播放音频文件 我需要知道声音何时结束 如何在声音结束时执行一个方法 这取决于你如何玩它 查找其状态更改可以触发 KVO 通知的委托方法 通知或可观察属性 例如 如果您使用 AVAudioPlayer 它
  • 如何为 Npgsql 提供自定义数据类型作为参数?

    我想使用 Npgsql 将键值对数组作为参数传递给 PostgreSQL 函数 我定义了以下类型 drop type if exists key value pair create type key value pair as k varc
  • 如何使用复选框列和绑定从 Xceed\Extended WPF Toolkit 设置数据网格控件

    我正在尝试将 WPF 数据网格替换为 xceed Extended WPF Toolkit DataGridControl 我需要对复选框列中的单击事件做出反应 以总结许多其他列 在现有的数据网格中 我有一个复选框列 它绑定到一个可观察集合
  • 无法使 (UTF-8) 繁体中文字符在 PHP gettext 扩展中工作(在 poEdit 中创建的 .po 和 .mo 文件)

    我检查了MSDN语言环境字符串是 zh Hant 但我也尝试使用 zh TW 中文 台湾 繁体中文字符在 poEditor 中看起来不错 但是当我在浏览器中打开文件时 这些字符只是奇怪的符号 o 我认为翻译是有效的 但编码有问题 我对字符集
  • AngularJS + Json:如何渲染 html

    我知道这个问题被问了很多次 但我相信我的设置不同 因此需要在不同的场景中提出一个新问题 有很多示例展示了如何渲染 HTML 但我似乎无法使其与任何示例一起使用 我想渲染 html aboutlongs 0 description 这有 br
  • 在powershell中拆分表情符号序列

    我有一个仅填充表情符号的文本框 没有空格或任何类型的字符 我需要拆分这些表情符号才能识别它们 这是我尝试过的 function emoji to unicode foreach emoji in textbox Text unicode S
  • 无法为委托分配参数类型不太具体的匿名方法[重复]

    这个问题在这里已经有答案了 public class Program delegate void Srini string param static void Main string args Srini sr new Srini Prin
  • 页面刷新后保留TextBox值

    我有一个文本框 这就是我为其赋值的方式 var start moment subtract 6 days var end moment datePicker daterangepicker timepicker false startDat
  • React JS:API 调用成功后获取上下文数据

    我一直在获取上下文数据 我有一个上下文和一个使用其数据的组件 我需要在我的组件中获取 API 调用成功时上下文变量的更新数据 那么我该怎么做呢 这是我尝试过的 上下文 js import React useState createConte