Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
React组件间通信:从子组件向父组件传递数据并触发API请求_创想鸟

React组件间通信:从子组件向父组件传递数据并触发API请求

React组件间通信:从子组件向父组件传递数据并触发API请求

本教程详细讲解如何在react中实现子组件向父组件传递数据,并利用这些数据触发父组件的api请求。通过将回调函数作为props传递给子组件,并在父组件中使用`usestate`管理状态和`useeffect`处理副作用,我们可以构建一个动态响应用户输入的应用程序。

引言:React组件间通信的核心挑战

在React的组件化开发模式中,数据流通常是单向的,即从父组件流向子组件。然而,在许多实际应用场景中,我们需要子组件(例如用户输入表单)将其产生的数据传递回父组件,以便父组件能够基于这些数据执行相应的操作,比如发起网络请求。本教程将深入探讨如何优雅地实现这一“子传父”的数据通信机制,特别是在需要根据用户输入动态触发API请求的场景。

理解子组件向父组件传递数据的工作原理

React中实现子组件向父组件传递数据的标准模式是利用回调函数。父组件定义一个函数,并将其作为prop传递给子组件。当子组件中发生某个事件(如表单提交、按钮点击)时,它会调用这个通过prop接收到的函数,并将需要传递的数据作为参数传回父组件。父组件接收到数据后,可以更新自身的状态,进而触发UI的重新渲染或执行其他副作用。

第一步:改造子组件 InputField.js

为了让 InputField 组件能够将其内部的输入值传递给父组件,我们需要对其进行修改,使其接受一个回调函数作为prop。

目标

当用户在 InputField 中输入内容并提交表单时,将输入框的值 (inputVal) 传递给父组件。

实现

定义 onSubmit prop: InputField 组件将通过props接收一个名为 onSubmit 的函数。调用回调函数: 在 handleSubmit 函数中,获取到 inputVal 后,调用这个 onSubmit prop,并将 inputVal 作为参数传入。

代码示例

// components/InputField.jsimport React from 'react';export default function InputField({ onSubmit }) { // 接受 onSubmit prop  function handleSubmit(e) {    // 阻止浏览器默认的表单提交行为    e.preventDefault();    // 读取表单数据    const form = e.target;    const inputVal = form.myInput.value;    console.log("Input value from child:", inputVal);    // 调用父组件传入的回调函数,并传递输入值    if (onSubmit) { // 确保 onSubmit 存在      onSubmit(inputVal);    }  }  return (                      );}

解释

现在,InputField 不再直接处理 inputVal 的最终用途,而是将其职责委托给了父组件。它通过 onSubmit prop 提供了一个接口,父组件可以通过这个接口来“监听”子组件的提交事件并获取数据。

第二步:在父组件 App.js 中接收并处理数据

App 组件需要定义一个状态来存储从 InputField 接收到的数据,并使用 useEffect 钩子来监听这个状态的变化,从而触发API请求。

目标

在 App 组件中存储从 InputField 接收到的用户输入。根据这个输入值动态地构建API请求URL。当输入值变化时,重新发起API请求。

实现

定义状态: 使用 useState 在 App 组件中创建一个状态变量,例如 searchValue,用于存储从 InputField 接收到的值。创建回调函数: 定义一个名为 handleSearchSubmit 的函数。这个函数将作为 InputField 的 onSubmit prop 传递,它接收 InputField 传递过来的值,并用这个值更新 searchValue 状态。传递回调: 在 App 组件中渲染 InputField 时,将 handleSearchSubmit 作为 onSubmit prop 传递给它。更新 useEffect: 修改 useEffect 钩子,使其依赖于 searchValue。当 searchValue 改变时,useEffect 会重新执行,触发新的 fetch 请求。同时,将API URL中的占位符替换为 searchValue。

代码示例

// App.jsimport './App.css';import AccountNumber from "./components/AccountNumber";import InputField from "./components/InputField";import { useEffect, useState } from "react";function App() {  // token fetch 相关状态  const [tokens, setTokens] = useState([]);  const [loading, setLoading] = useState(false);  // 新增状态:用于存储从 InputField 接收到的搜索值  const [searchValue, setSearchValue] = useState(null);   // 处理 InputField 提交的回调函数  const handleSearchSubmit = (val) => {    setSearchValue(val); // 更新 searchValue 状态  };  useEffect(() => {    // 只有当 searchValue 有效时才执行 fetch 请求    if (searchValue) {       setLoading(true);      fetch(`https://api.multiversx.com/accounts/${searchValue}/tokens`) // 使用 searchValue 构建 URL        .then(response => response.json())        .then(json => setTokens(json))        .finally(() => {          setLoading(false);        });      console.log("Fetching tokens for:", searchValue);     } else {      // 如果 searchValue 为空,可以清空 tokens 或显示提示      setTokens([]);     }  }, [searchValue]); // 将 searchValue 添加到依赖数组,当它变化时重新执行 useEffect  // ... 其他辅助函数(round, numberWithSpaces)保持不变  return (            

Total number of accounts

{/* 正确地渲染 InputField 组件,并传递回调函数 */}
{/* 可以显示当前的搜索值,例如: */}

Current Search Value: {searchValue || "None"}

{loading ? (
Loading...
) : (

Tokens

{/* ... tokens 列表渲染逻辑 ... */}
{tokens.length > 0 ? ( tokens.map(token => ( )) ) : ( )}
Name Price Hold
@@##@@

{token.name}

${round(token.price, 10000000)}

{round(token.balance / Math.pow(10, token.decimals), 10000000)}

${round(token.valueUsd, 10000000)}

No tokens found or no search value provided.
);}export default App;

解释

searchValue 状态: App 组件现在拥有了一个 searchValue 状态,它会在 InputField 提交时被更新。handleSearchSubmit 回调: 这个函数充当了 InputField 和 App 之间的桥梁。当 InputField 调用 onSubmit 时,实际上是在调用 App 组件中定义的 handleSearchSubmit,从而更新 App 的状态。useEffect 依赖: useEffect 的依赖数组中包含了 searchValue。这意味着每当 searchValue 发生变化时(即用户提交了新的输入),useEffect 内部的副作用函数就会重新执行,触发新的API请求。条件 fetch: if (searchValue) 判断确保只有当 searchValue 有实际值时才发起网络请求,避免在组件初次渲染或 searchValue 为空时发出无效请求。组件渲染方式: 注意 InputField 组件现在是使用 JSX 语法 进行渲染的,而不是像函数一样直接调用 InputField()。这是React组件的正确使用方式,确保了组件的生命周期和状态管理机制正常工作。

注意事项与最佳实践

组件渲染方式: 务必使用 JSX 语法 来渲染 React 组件。直接调用 ComponentName() 会将其作为普通 JavaScript 函数执行,导致组件无法拥有自己的状态、生命周期方法,并且可能导致性能问题或意外行为。useEffect 依赖数组: useEffect 的依赖数组是其核心。确保将所有在副作用函数内部使用到的、且可能随时间变化的外部变量(如 searchValue)都包含在依赖数组中。这可以避免闭包问题,并确保副作用在正确的时间点重新运行。初始状态与条件请求: 在 useEffect 中发起网络请求时,通常需要考虑请求参数的初始状态。如果 searchValue 初始为 null 或空字符串,可能不希望立即发起请求。通过 if (searchValue) 这样的条件判断,可以有效控制请求的时机。错误处理: 在实际应用中,fetch 请求应该包含 .catch() 块来处理网络错误、API响应错误或其他异常情况,以提升应用的健壮性。加载状态: 使用 loading 状态来向用户提供视觉反馈,告知数据正在加载中,提升用户体验。

总结

通过本教程,我们学习了如何在React中有效地实现子组件向父组件传递数据,并利用这些数据驱动父组件的复杂逻辑,如动态API请求。核心思想是:父组件定义回调函数并作为props传递给子组件,子组件在特定事件发生时调用该回调函数并传入数据。父组件则利用 useState 管理接收到的数据,并结合 useEffect 钩子来响应数据变化,执行副作用(如网络请求)。掌握这一模式是构建复杂、交互式React应用的关键一步。

React组件间通信:从子组件向父组件传递数据并触发API请求

以上就是React组件间通信:从子组件向父组件传递数据并触发API请求的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1529146.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Vitejs HTML 加载错误:文件路径中特殊字符的隐秘影响
上一篇 2025年12月20日 20:52:03
JavaScript中的代理模式如何实现对象访问控制?
下一篇 2025年12月20日 20:52:12

相关推荐

  • 微软为PowerToys 键盘管理器开发新功能:可快捷启动应用 / 网站

    微软为PowerToys 键盘管理器开发新功能:可快捷启动应用 / 网站微软为PowerToys 键盘管理器开发新功能:可快捷启动应用 / 网站微软为PowerToys 键盘管理器开发新功能:可快捷启动应用 / 网站微软为PowerToys 键盘管理器开发新功能:可快捷启动应用 / 网站

    据国外科技媒体 deskmodder 的报道,微软正着手为“键盘管理器”(keyboard manager)工具添加全新功能。“键盘管理器”隶属于 powertoys 工具集,允许用户自定义全局及各应用程序内的键盘快捷键。微软计划扩展其功能,使用户能够通过自定义快捷键来启动程序,并设定程序启动时的状…

    2026年9月27日 • 用户投稿
    100
  • Java中高并发数据库同步与任务处理教程

    Java中高并发数据库同步与任务处理教程Java中高并发数据库同步与任务处理教程Java中高并发数据库同步与任务处理教程Java中高并发数据库同步与任务处理教程

    本文旨在探讨Java应用中处理高并发数据库操作的有效策略,尤其针对大量数据行的计算与状态更新场景。我们将介绍如何利用ExecutorService和任务对象实现并发处理,并通过数据库连接池优化资源管理。重点关注数据库层面的并发控制机制,如事务和行级锁,以确保数据一致性和系统性能,并提供实际的代码示例…

    2026年9月27日 • 用户投稿
    100
  • 360极速浏览器无法播放B站视频是什么原因_Bilibili视频播放失败排查方案

    360极速浏览器无法播放B站视频是什么原因_Bilibili视频播放失败排查方案360极速浏览器无法播放B站视频是什么原因_Bilibili视频播放失败排查方案360极速浏览器无法播放B站视频是什么原因_Bilibili视频播放失败排查方案360极速浏览器无法播放B站视频是什么原因_Bilibili视频播放失败排查方案

    若360极速浏览器播放B站视频黑屏或卡顿,可依次排查:1. 禁用HEVC硬件解码,强制使用AVC格式;2. 更新Widevine插件以支持DRM内容;3. 切换至兼容模式解决内核冲突;4. 清除缓存并重置浏览器设置。 如果您尝试在360极速浏览器中播放B站视频,但出现黑屏、卡顿或无法加载的情况,则可…

    2026年9月27日 • 用户投稿
    000
  • Java高并发数据库同步处理:高效任务调度与连接管理实践

    Java高并发数据库同步处理:高效任务调度与连接管理实践Java高并发数据库同步处理:高效任务调度与连接管理实践Java高并发数据库同步处理:高效任务调度与连接管理实践Java高并发数据库同步处理:高效任务调度与连接管理实践

    本文深入探讨了在Java应用中处理海量数据并发同步的策略。通过将数据库操作封装为独立任务,结合ExecutorService进行高效调度,并利用数据库连接池(如HikariCP)优化资源管理,同时强调了数据库层面事务和锁机制的重要性。文章提供了实现并发处理、标记已消费行以及确保系统高性能和数据一致性…

    2026年9月27日 • 用户投稿
    100
  • 拼多多API接口有哪些限制?智能客服如何适配拼多多的特殊对接要求?拼多多API对接遇阻?晓多智能客服突破平台限制,3步搞定特殊对接难题!

    拼多多API接口有哪些限制?智能客服如何适配拼多多的特殊对接要求?拼多多API对接遇阻?晓多智能客服突破平台限制,3步搞定特殊对接难题!拼多多API接口有哪些限制?智能客服如何适配拼多多的特殊对接要求?拼多多API对接遇阻?晓多智能客服突破平台限制,3步搞定特殊对接难题!拼多多API接口有哪些限制?智能客服如何适配拼多多的特殊对接要求?拼多多API对接遇阻?晓多智能客服突破平台限制,3步搞定特殊对接难题!拼多多API接口有哪些限制?智能客服如何适配拼多多的特殊对接要求?拼多多API对接遇阻?晓多智能客服突破平台限制,3步搞定特殊对接难题!

    亮出“小红卡”加入本地生活争夺赛,小红书不硬刚“持小红卡用户,到店买单最低打9折。”这个秋天,本地生活赛道打得十分火热,高德以“扫街榜”切入,美团、抖音等平台也纷纷加大补贴投入,拼多多旗下快团团试水餐饮本地零售,就连一向“克制”的小红书也突然开始发力。9月26日,小红书此前悄然布局的本地生活会员服务…

    2026年9月27日 • 用户投稿
    100
  • 百度地图街景功能无法打开怎么办

    百度地图街景功能无法打开怎么办百度地图街景功能无法打开怎么办百度地图街景功能无法打开怎么办百度地图街景功能无法打开怎么办

    百度地图街景打不开多因操作、网络或区域限制。先确认使用最新版应用并保持网络稳定,手机端进入“图层”选择“全景地图”,电脑端点击右下角“全景”图标开启功能;若无反应,尝试重启、更新或清理缓存;注意仅部分城市主干道支持街景,可切换至北京等大城市测试是否可用。 百度地图街景功能打不开,多数是操作路径不清或…

    2026年9月27日 • 用户投稿
    100
  • 告别繁琐构造函数:使用建造者模式优化Java对象创建

    告别繁琐构造函数:使用建造者模式优化Java对象创建告别繁琐构造函数:使用建造者模式优化Java对象创建告别繁琐构造函数:使用建造者模式优化Java对象创建告别繁琐构造函数:使用建造者模式优化Java对象创建

    本文针对Java中处理多个可选参数时,传统构造函数组合繁琐的问题,详细介绍了建造者模式(Builder Pattern)。该模式通过分阶段构建对象,避免了大量参数构造函数和重复组合,提升了代码的可读性和可维护性。文章将通过代码示例深入解析建造者模式的实现原理与优势,并提供实际应用指导。 传统构造函数…

    2026年9月27日 • 用户投稿
    200
  • 怎么用豆包AI帮我生成JavaScript代码 快速生成JS代码的豆包AI使用指南

    怎么用豆包AI帮我生成JavaScript代码 快速生成JS代码的豆包AI使用指南怎么用豆包AI帮我生成JavaScript代码 快速生成JS代码的豆包AI使用指南怎么用豆包AI帮我生成JavaScript代码 快速生成JS代码的豆包AI使用指南怎么用豆包AI帮我生成JavaScript代码 快速生成JS代码的豆包AI使用指南

    使用豆包ai生成javascript代码的关键在于明确需求、提供清晰指令并进行结果优化。一要明确具体功能,如表单验证或dom操作,避免模糊提问;二要用结构化的中文指令,如“请用javascript写一个函数用来……”,并可添加兼容性等限制条件;三要检查生成代码的逻辑与语法,结合浏览器测试进行调整。实…

    2026年9月27日 • 用户投稿
    100
  • 获取父级 Option Group 的文本标签

    获取父级 Option Group 的文本标签获取父级 Option Group 的文本标签获取父级 Option Group 的文本标签获取父级 Option Group 的文本标签

    本文介绍了如何使用 JavaScript 获取 HTML 元素中选定 标签的父级 标签的文本标签。重点在于理解 closest() 方法的行为,以及嵌套 标签可能带来的问题,并提供替代方案以实现所需功能。 理解 closest() 方法 在 JavaScript 中,closest() 方法用于查找…

    2026年9月27日 • 用户投稿
    100
  • uc浏览器如何查看已保存的密码_UC浏览器已存账号密码查看教程

    uc浏览器如何查看已保存的密码_UC浏览器已存账号密码查看教程uc浏览器如何查看已保存的密码_UC浏览器已存账号密码查看教程uc浏览器如何查看已保存的密码_UC浏览器已存账号密码查看教程uc浏览器如何查看已保存的密码_UC浏览器已存账号密码查看教程

    首先通过UC浏览器密码管理功能查看保存的密码,手机端进入设置-隐私与安全-密码管理,验证身份后点击显示密码;电脑端在设置-其他-管理已保存的密码中查看,需验证系统账户;若无法直接查看,可使用开发者工具将密码框type属性由password改为text,临时明文显示密码。 如果您在使用UC浏览器时需要…

    2026年9月27日 • 用户投稿
    200
  • 文本动画的类选择器应用与优化

    文本动画的类选择器应用与优化文本动画的类选择器应用与优化文本动画的类选择器应用与优化文本动画的类选择器应用与优化

    本文详细介绍了如何将基于ID的文本动画转换为基于类的实现,以支持在多个HTML元素上复用同一动画效果。通过JavaScript动态生成带有自定义CSS变量的标签,并结合CSS @keyframes动画,实现了可灵活应用于页面中任意指定元素的波浪式文本动画,并提供了两种优化方案。 1. 问题背景与目标…

    2026年9月27日 • 用户投稿
    100
  • 点淘粉丝团怎么加入_点淘粉丝团如何加入获得专属福利待遇

    点淘粉丝团怎么加入_点淘粉丝团如何加入获得专属福利待遇点淘粉丝团怎么加入_点淘粉丝团如何加入获得专属福利待遇点淘粉丝团怎么加入_点淘粉丝团如何加入获得专属福利待遇点淘粉丝团怎么加入_点淘粉丝团如何加入获得专属福利待遇

    首先确认是否已加入主播粉丝团,未加入则无法领取专属福利。通过直播间或主播主页点击“加入粉丝团”并完成关注即可解锁特权。部分主播需完成点赞、评论等任务方可入团。成功入团后,在直播间查看粉丝专享价商品、参与抽奖或秒杀活动,并留意私信领取兑换码。 如果您在观看点淘直播时发现主播提供专属福利,但您无法领取,…

    2026年9月27日 • 用户投稿
    000
  • firefox浏览器怎么重置到初始设置 Firefox浏览器恢复出厂默认设置指南

    firefox浏览器怎么重置到初始设置 Firefox浏览器恢复出厂默认设置指南firefox浏览器怎么重置到初始设置 Firefox浏览器恢复出厂默认设置指南firefox浏览器怎么重置到初始设置 Firefox浏览器恢复出厂默认设置指南firefox浏览器怎么重置到初始设置 Firefox浏览器恢复出厂默认设置指南

    首先通过Firefox内置刷新功能恢复默认设置,打开菜单→帮助→更多故障排除信息→刷新Firefox;若问题仍存,可手动删除%APPDATA%MozillaFirefoxProfiles中xxxx.default-release文件夹以彻底重置;还可尝试以安全模式重新启动,禁用扩展排查冲突,确认后返…

    2026年9月27日 • 用户投稿
    300
  • 在WildFly中集成EJB与JAX-WS:解决部署与访问难题

    在WildFly中集成EJB与JAX-WS:解决部署与访问难题在WildFly中集成EJB与JAX-WS:解决部署与访问难题在WildFly中集成EJB与JAX-WS:解决部署与访问难题在WildFly中集成EJB与JAX-WS:解决部署与访问难题

    本文详细介绍了在WildFly应用服务器上,将EJB(Enterprise JavaBeans)与JAX-WS(Java API for XML Web Services)项目整合到EAR(Enterprise Archive)中的实践。教程涵盖了多模块Maven项目结构、依赖管理、以及如何解决部署…

    2026年9月27日 • 用户投稿
    100
  • 在Java中如何优化线程池大小

    线程池大小应根据任务类型和运行环境优化:CPU密集型设为CPU核心数+1,I/O密集型可设为核心数2~4倍;避免无界队列,选用有界队列并配置合理拒绝策略;通过监控活跃线程、队列长度等指标动态调优;优先使用ThreadPoolExecutor显式配置,避免Executors默认风险。 线程池大小的设置…

    2026年9月27日
    100
  • Java循环中条件判断消息重复输出的优化策略

    Java循环中条件判断消息重复输出的优化策略Java循环中条件判断消息重复输出的优化策略Java循环中条件判断消息重复输出的优化策略Java循环中条件判断消息重复输出的优化策略

    本文探讨了Java循环中因条件判断逻辑不当导致重复输出消息的常见问题。通过引入布尔标志位或利用循环的早期退出机制,可以有效管理循环内的状态,确保在遍历集合时,根据匹配结果只输出一次准确的成功或失败信息,从而提高程序的逻辑清晰度和用户体验。 问题分析:循环中的重复判断 在处理集合数据时,我们经常需要遍…

    2026年9月27日 • 用户投稿
    100
  • 夸克怎么关闭消息推送_夸克App消息通知关闭设置

    夸克怎么关闭消息推送_夸克App消息通知关闭设置夸克怎么关闭消息推送_夸克App消息通知关闭设置夸克怎么关闭消息推送_夸克App消息通知关闭设置夸克怎么关闭消息推送_夸克App消息通知关闭设置

    首先在夸克App的“我的”-“设置”中关闭“消息推送”开关,其次可在手机系统“设置”-“通知”中彻底关闭夸克的允许通知权限,以阻止不必要的消息推送。 如果您在使用夸克App时频繁收到不必要的消息推送,影响了日常使用体验,可以通过调整应用内的通知权限来管理这些推送。以下是具体的操作步骤: 本文运行环境…

    2026年9月27日 • 用户投稿
    000
  • 推荐6款好用却不为人知的效率软件!

    推荐6款好用却不为人知的效率软件!推荐6款好用却不为人知的效率软件!推荐6款好用却不为人知的效率软件!推荐6款好用却不为人知的效率软件!

    随着科技的不断进步,越来越多的日常辅助软件工具被广泛应用于办公环境中。这些工具只是表达我们需求的一种方式,因此在不同的工作环境或个人习惯下,每个人的使用方式也会有所不同。 接下来,小编将为大家介绍6款实用但鲜为人知的效率软件,能够显著提升你的工作效率! MindMaster MindMaster是一…

    2026年9月27日 • 用户投稿
    200
  • 美团双11外卖超值套餐怎么找到_美团双11外卖超值套餐查找

    美团双11外卖超值套餐怎么找到_美团双11外卖超值套餐查找美团双11外卖超值套餐怎么找到_美团双11外卖超值套餐查找美团双11外卖超值套餐怎么找到_美团双11外卖超值套餐查找美团双11外卖超值套餐怎么找到_美团双11外卖超值套餐查找

    答案:可通过美团App首页轮播图、搜索“11.11”关键词、外卖频道活动入口及品牌旗舰店领取双11优惠。具体包括点击首页“双11狂欢节”进入主会场,搜索“5号5折”直达专题页,进入外卖频道参与“神抢手直播间”,或在瑞幸咖啡、蜜雪冰城等品牌旗舰店选购限时团购套餐,享受五折起、免单卡等超值优惠。 如果您…

    2026年9月27日 • 用户投稿
    000
  • Java多线程中竞态条件的原理与实践

    Java多线程中竞态条件的原理与实践Java多线程中竞态条件的原理与实践Java多线程中竞态条件的原理与实践Java多线程中竞态条件的原理与实践

    本文深入探讨了Java多线程编程中的竞态条件(Race Condition),通过分析一个未能产生竞态条件的求和示例,引出并详细演示了如何通过共享可变状态和非原子操作来故意制造竞态条件。文章提供了具体的Java代码示例,解释了竞态条件发生的原因、其在输出中的体现,并强调了在并发编程中识别和避免此类问…

    2026年9月27日 • 用户投稿
    100

发表回复

登录后才能评论
关注微信