异步调用完成后渲染 React 函数组件的一部分

2024-03-26

我将 Material-ui 与 React 函数组件一起使用,并使用其自动完成组件。我自定义了它,每当我更改输入字段中的文本时,我希望该组件呈现新的搜索结果。

callAPI("xyz")

我在操作中调用 API 并使用 xyz 参数,从该函数组件调用调度方法。

这里的问题是,当组件进行调用时,它应该等待 API 响应,然后渲染结果,但它得到了一个未解决的承诺,因此渲染失败。

<Paper square>
    {callAPI("xyz").results.map(
        result => console.log(result);
    )}
</Paper>

由于结果是一个未兑现的承诺,因此它将无法映射。 我需要某种方法仅在数据可用时调用地图,或者在数据存在之前显示一些文本,然后在获取数据后进行更改。

任何纠正此代码的建议都会非常有帮助。

EDIT:

function IntegrationDownshift() {
    return (
        <div>
            <Downshift id="downshift-simple">
                {({
                    getInputProps,
                    getItemProps,
                    getMenuProps,
                    highlightedIndex,
                    inputValue,
                    isOpen,
                    selectedItem
                }) => (
                    <div>
                        {renderInput({
                            fullWidth: true,
                            InputProps: getInputProps({
                                placeholder: "Search users with id"
                            })
                        })}

                        <div {...getMenuProps()}>
                            {isOpen ?
                                 <Paper square>
                                {callAPI(inputValue).users.map(
                                    (suggestion, index) =>
                                        renderSuggestion({
                                            suggestion,
                                            index,
                                            itemProps: getItemProps({
                                                item:
                                                    suggestion.userName
                                            }),
                                            highlightedIndex,
                                            selectedItem
                                        })
                                )}
                            </Paper>  
                             : null}
                        </div>
                    </div>
                )}
            </Downshift>
        </div>
    );
}

React 16.8 引入Hooks https://reactjs.org/docs/hooks-overview.html#but-what-is-a-hook:

Hooks 是让你“挂钩”React 状态和生命周期的函数 来自功能组件的特征。

所以你有了useState() https://reactjs.org/docs/hooks-state.html您可以使用空数组声明一个状态变量,并在useEffect() https://reactjs.org/docs/hooks-effect.html当您从 API 获得响应时填充状态:

function App() {

  const [data, setData] = useState([]);

  useEffect(() => {
    callAPI("xyz").then(result => {
      setData(result);
    })  
  }, []);

  if(!data.length) return (<span>loading...</span>);

  return (
    <Paper square>
        {data.map(
            result => console.log(result);
        )}
    </Paper>
  );
}

有关钩子的更多信息:https://reactjs.org/docs/hooks-intro.html https://reactjs.org/docs/hooks-intro.html.

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

异步调用完成后渲染 React 函数组件的一部分 的相关文章

随机推荐

  • 从 CGImage 获取 RGB 像素数据

    我正在尝试从 CGImage 访问像素数据 我希望能够以整数形式访问 RGB 值 我想我已经接近这个代码了 UIImage theImage UIImage imageNamed rgb png CGImageRef cgImageRef
  • 多维缩放后如何获取特征值?

    我有兴趣查看执行多维缩放后的特征值 什么函数可以做到这一点 我看了看文档 http scikit learn org stable modules generated sklearn manifold MDS html sklearn ma
  • Qt Webengine 渲染到打印

    有没有办法使用 QtWebEngine 将 HTML SVG 渲染到打印机 PDF 和光栅图像 我们想从WebKit切换到WebEngine 因此使用WebKit的QWebView不再是一个选择 宣布 Qt Web Engine 将支持打印
  • 如何解决具有 3 个变量的背包问题?

    解决与背包问题相关的问题的最佳方法是什么 该问题有 3 个变量 例如 价值 重量和体积 尽可能的最大值 有最大重量和体积限制 我尝试过根据其值 重量 体积 使用定义的索引 但我相信这不会给我最好的解决方案 所以我进行了搜索 有些人建议使用动
  • Haskell 类似实例?

    我是 Haskell 的新手 所以我的问题可能很愚蠢 我想要一个功能 show2 Show a gt a gt String 这会返回show a对于任何a but a如果 a 是它本身String 我该如何实施 附 如果这个函数已经在某个
  • 用汇编语言更改 CS:IP

    怎么可以强行改变CS and IP都是汇编语言 ORG指令可用于更改的数量IP 但是你如何改变CS 基本上我想使用汇编来实现多线程 许多论坛 包括堆栈溢出中的一个问题都说这是不可能的 但是即使 C 是由汇编代码制成的 它如何具有多线程选项呢
  • Spring中列表到页面的转换

    我正在尝试在春季将列表转换为页面 我已经使用它进行了转换 new PageImpl 用户 可分页 users size 但现在我在排序和分页本身方面遇到了问题 当我尝试传递大小和页面时 分页不起作用 这是我正在使用的代码 我的控制器 pub
  • CSS:将父级更改为子级的焦点

    假设你有类似的东西 div class parent div
  • 确定任务是否在外部 build.gradle 文件中定义

    我有一个在运行时创建的 gradle 任务 用于调用另一个任务 myOtherTask 该任务位于单独的 gradle 文件中 问题是如果其他任务不存在 则会抛出异常 在尝试调用任务之前 是否可以检查外部 gradle 文件中是否存在该任务
  • Youtube API:评论插入403禁止权限不足

    我正在使用底部的 API 资源管理器https developers google com youtube v3 docs commentThreads insert https developers google com youtube
  • React-native视图按内部文本自动调整宽度

    据我所知 react native 样式表不支持 min width max width 属性 我里面有一个视图和文本 自动宽度的视图不会通过继承文本元素调整大小 如何解决该问题并使用文本宽度自动设置视图宽度 我的代码是
  • 如何将多个 SHA1 指纹添加到我的 Android 应用程序中进行测试?

    我的 Android 应用程序已经在 Google 开发者控制台上有另一个开发者不久前生成的 SHA1 指纹 现在 我正在应用程序中调试 Google 登录错误 结果发现 Google 登录使用在中找到的默认 SHA 1 android d
  • iTunesConnect - 自动下载应用程序的使用情况分析

    iTunes 连接 https itunesconnect apple com的应用程序分析页面有两个部分 销售和使用情况 对于第一部分 他们有自动摄取工具 https www apple com itunesnews docs AppSt
  • 在 Swift 3 中使用 -observeValueForKeyPath:ofObject:change:context:

    我正在尝试将 Swift 2 2 项目转换为 Swift 3 但收到以下错误 Method observeValue forKeyPath ofObject change context with Objective C selector
  • 将人类友好的日期转换为毫秒[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如何将人类友好的日期转换为自 UNI
  • 如何在 Linux 中获取“文件创建时间”

    我需要找出在 Linux 中使用 C 创建文件的时间和日期 如何获取文件的最后修改日期 http www jb man ac uk slowe cpp lastmod html struct stat attrib 1 create a f
  • 在特定时间过后自动更改 WooCommerce 订单状态?

    有没有办法让 WooCommerce 在经过这么长时间后自动将自定义订单状态更改为不同的自定义订单状态 基本上 我希望所有订单状态更改为 退款已提交 的订单在 30 天后自动更改为 退款已过期 我意识到这些不是正常的 WooCommerce
  • Google OAuth 访问令牌

    我对 OAuth 和 Google 感到很困惑 我花了很长时间才获得刷新令牌来创建新的访问令牌 然后发现refresh token也过期了 这有什么意义啊 我需要做的就是保留一个有效的 access token 以供使用legato htt
  • 如何在 WebView 中加载 HTML 页面时显示进度对话框

    我正在使用 Web 视图来显示 html 页面 并且我想在页面加载之前显示一个进度对话框 完成后 对话框必须消失 我为此使用了 AsyncTask 但对话框不显示 请参阅下面的我的代码 class DownloadAysnc extends
  • 异步调用完成后渲染 React 函数组件的一部分

    我将 Material ui 与 React 函数组件一起使用 并使用其自动完成组件 我自定义了它 每当我更改输入字段中的文本时 我希望该组件呈现新的搜索结果 callAPI xyz 我在操作中调用 API 并使用 xyz 参数 从该函数组