如何等待在 React-Redux 中设置接收到的同步数组的所有属性?

2023-12-09

我无法使用 map() 函数进行渲染,因为即使我从数组中获取数据,数组的长度始终为 0。有没有办法设置异步数组正确加载之前的时间间隔?

这是我的代码:

function ShortcutComponent({ usershortcuts }) {
    console.log(usershortcuts); // I get an array
    console.log(usershortcuts.length); //I get 0
    return (
        <Button ui="headerButton" arrow={false} ripple={false} iconCls="icon-directions" border={false} handler={() => this.loadData()}>
                <Menu title="Shortcuts">
                    {usershortcuts.map((item) => {
                       <MenuItem key={item.id} iconCls={item.shortcutDefinition.iconCls} text={item.shortcutDefinition.description} />
                    }
                </Menu>
            </Button>
    )
}

const mapStateToProps = (state) => {
    return { 
        usershortcuts: state.usershortcuts
    }
};


const mapDispatchToProps = (dispatch) => {
    return {
        actions: bindActionCreators(usershortcutAction, dispatch)
    }
}


export default connect(mapStateToProps, mapDispatchToProps) (ShortcutComponent);

作为证据,这里有图片:

enter image description here


首先,确保在组件安装后调用启动数据获取的函数调用。这样做是为了当状态更改时可能会发生重新渲染。其次,在映射您希望拥有数据的数组之前,请确保它有一些东西。也就是说,而不是

{ someArray.map() }

宁愿做

{ someArray.length > 0 && someArray.map() }

你可能不知道need这样做,但这是一个很好的做法。

第三,为了正确等待结果被发现,通常的做法是使用redux-thunk。 Redux-thunk 有助于延迟分派操作,直到满足某些条件(在您的情况下,您希望仅在找到数据时分派“数据找到”操作)。

这是一个示例,我们获取轮播图片并在视图组件中映射它们。您可以轻松地将其适应您的项目。

export function loadCarouselSlidesThunk() {
  return dispatch => {
    dispatch(setIsLoadingAction(true));
    getCarouselSlides().then(pictures =>
      dispatch(setCarouselSlidesAction(pictures)));
  };
}

从这里开始,您的减速器可以简单地填充关心幻灯片的状态部分,如下所示

export default function carouselReducer(state = initialSate, action) {
  switch (action.type) {
    case setIsLoading.actionType:
        return { ...state, isLoading: action.payload };
    case setCarouselSlides.actionType:
        return { ...state, carouselSlides: action.payload, isLoading: false };
    default:
        return state;
  }
}

一旦状态更新,您的整个应用程序就会重新渲染,现在您将能够映射实际数据。

因此,在我看来,最好的方法是将 redux-thunk 与 Promise 一起使用。请参阅上面的链接,了解如何在应用程序中设置 redux。如果不熟悉Promise,请参考this.

Cheers

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

如何等待在 React-Redux 中设置接收到的同步数组的所有属性? 的相关文章

随机推荐

  • 如何使用 Recharts 获取折线图上的悬停元素

    我实际上是新来的 ReactJS 中也有新功能 我想做的是 当我将鼠标悬停在值 1 行上时 只有值 1 数据才会显示在工具提示内 如您所见 此工具提示的情况并非如此 请帮助我真的需要它 在每个 Line 元素上尝试此代码 activeDot
  • 识别数组中相似的实例并将它们合并

    我有一个数组数组 像这样 Abradolf Lincler 4 Abradolf Lincler 4 Scary Terry 4 Abradolf Lincler 4 Scary Terry 4 Scary Terry 4 Abradolf
  • 如何将标记头放置在链接中间

    我想在链接中间放置一个标记 而不是像我的代码那样将其放置在末尾 尽管我用谷歌搜索了它 但我无法找到我的代码的解决方案
  • 为什么我需要 Econo JIT?

    我研究了 Econo JIT 并没有针对编译 IL 的环境进行优化 这与 Normal JIT 不同 此外 它不会为下次执行创建机器代码缓存 这意味着 每次PE运行时 JIT都会再次将IL编译成机器指令 我很困惑为什么 One 会选择在 E
  • 过滤 os.walk() 目录和文件

    我正在寻找一种方法来包含 排除文件模式并从os walk call 这就是我现在正在做的事情 import fnmatch import os includes doc odt excludes home paulo freitas Doc
  • wscript 和 cscript 之间的区别

    cscript 和 wscript 有什么区别 哪个最适合在 Windows 中进行 Telnet 和 FTP 自动化 在 Windows 中 可执行文件可以是控制台应用程序 也可以是 Windows 应用程序 或者是 SFU 或本机应用程
  • 如何在 DataGridView 列中显示 MM/dd/yyyy(无时间)?

    我需要有关 DataGridView 列日期格式的帮助 我希望日期为 MM dd yyyy 我不需要时间 如何以编程方式完成此操作 我已经尝试过这段代码 但它不起作用gridView Columns 1 DefaultCellStyle F
  • 如何将C库编译成.Net dll?

    我们是否可以通过编译包含以下代码的 cpp 项目来将 C 库编译为 Net dll 包含并开放对所有 C 库函数的访问 extern C include
  • Python,“open”和“with open”之间的区别[重复]

    这个问题在这里已经有答案了 我没有使用过with声明 但我对其目的有些熟悉 通过以下代码 1块按预期工作 但是 2 在这里纠正我 应该做与第一个相同的事情 抛出以下异常FileExistsError Errno 17 File exists
  • Swift 中 registerclass 的使用不明确

    我收到错误 ambiguous use of registerclass 当做 tableView RegisterClass cellClass CustomTableViewCell self forCellReuseIdentifie
  • 如何在单个子图中绘制多个信号

    我想将一个或多个信号绘制到一张图中 对于每个信号 可以指定单独的颜色 线宽和线型 如果必须绘制多个信号 还应提供图例 到目前为止 我使用以下代码 它允许我绘制最多三个信号 import matplotlib fig matplotlib f
  • 检查对象列表中的对象类型

    获得一个带有 StackPanel 的 WPF 表单 其中包含带有 StackPanel 的扩展器
  • kafka.cluster.BrokerEndPoint 无法转换为 kafka.cluster.Broker

    我正在尝试将数据从 kafka 流式传输到 Spark 我正在使用 Spark 1 6 2 与 kafka 0 9 0 1 和 scala 2 11 8 当我使用基于接收器的方法时 一切正常 KafkaUtils createStream
  • 在 Linux/MacOS 上双击执行 C++ 可执行文件

    我编写了一个 C 软件 该软件需要从其所在的文件夹中读取文件 然后在同一文件夹中写入其他文件 目前 我通过 shell 导航到复制了可执行文件的文件夹 然后使用以下命令启动它 executable name 我想通过双击来执行它 如果我这样
  • MongoDB+Azure+Android:错误:com.mongodb.MongoException:未与 master 通信且重试已用完

    背景 我有 MongoDB 副本集在 Azure 云服务工作者 Web 角色中运行 使用mongo azure 库 我第一次设置 Android 项目连接到 MongoDB Azure 时 IO 读取和写入 工作正常 然后 由于硬编码测试
  • 如何将数据从 SQL Server 2005 导出到 MySQL [关闭]

    Closed 这个问题是无关 目前不接受答案 我一直在用头撞SQL Server 2005试图获取大量数据 我得到了一个包含近 300 个表的数据库 我需要将其转换为 MySQL 数据库 我的第一个调用是使用 bcp 但不幸的是它不会生成有
  • 使用 Python 捕获单帧(使用网络摄像头)

    我检查了其他解决方案 但他们没有回答我的问题 我的问题是 每当我尝试从视频中仅捕获一帧 我基本上想用网络摄像头拍照 时 我只会看到一个黑色的窗口 Code import cv2 cam cv2 VideoCapture 0 frame ca
  • Nginx proxy_pass 仅部分有效

    我有以下设置 主服务器 调用它https master com 从属服务器 调用它https slave com 两者都在 Ubuntu 16 04 上运行 Nginx 在主服务器上 我在我的目录中创建了以下配置块 etc nginx si
  • Spring Data MongoDB - 聚合框架 - 组操作中的引用无效

    我使用 Spring Data 1 3 0 RC1 来访问我们的 MongoDB 对于一些新查询 我想使用聚合框架 在 mongo shell 中 命令为 db spotreports aggregate unwind pd group i
  • 如何等待在 React-Redux 中设置接收到的同步数组的所有属性?

    我无法使用 map 函数进行渲染 因为即使我从数组中获取数据 数组的长度始终为 0 有没有办法设置异步数组正确加载之前的时间间隔 这是我的代码 function ShortcutComponent usershortcuts console