Reactjs - 如何将值从子组件传递到祖父组件?

2023-11-21

下面是在reactjs中将值从子组件传递到父组件的正确示例。

App.jsx

import React from 'react';

class App extends React.Component {

   constructor(props) {
      super(props);
        
      this.state = {
         data: 'Initial data...'
      }

      this.updateState = this.updateState.bind(this);
   };

   updateState() {
      this.setState({data: 'Data updated from the child component...'})
   }

   render() {
      return (
         <div>
            <Content myDataProp = {this.state.data} 
               updateStateProp = {this.updateState}></Content>
         </div>
      );
   }
}

class Content extends React.Component {

   render() {
      return (
         <div>
            <button onClick = {this.props.updateStateProp}>CLICK</button>
            <h3>{this.props.myDataProp}</h3>
         </div>
      );
   }
}

export default App;

main.js

import React from 'react';
import ReactDOM from 'react-dom';
import App from './App.jsx';

ReactDOM.render(<App/>, document.getElementById('app'));

我需要明确关于将值从子组件传递到祖父母组件的概念。请帮助我!


您可以通过以下方式将更新函数传递给孙子props,只需从子组件再次传递它即可。

class App extends React.Component {
  constructor(props) {
    super(props)
    this.state = {
      data: 'Initial data...'
    }
    this.updateState = this.updateState.bind(this);
  }

  updateState(who) {
    this.setState({data: `Data updated from ${who}`})
  }

  render() {
    return (
      <div>
        Parent: {this.state.data}
        <Child update={this.updateState}/>
      </div>
    )
  }
}

class Child extends React.Component {
  render() {
    return (
      <div>
        Child component
        <button onClick={() => this.props.update('child')}>
          CLICK
        </button>
        <GrandChild update={this.props.update}/>
      </div>
    );
  }
}

class GrandChild extends React.Component {
  render() {
    return (
      <div>
        Grand child component
        <button onClick={() => this.props.update('grand child')}>
          CLICK
        </button>
      </div>
    );
  }
}
ReactDOM.render(<App />, document.getElementById('root'))
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="root"></div>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Reactjs - 如何将值从子组件传递到祖父组件? 的相关文章

  • Eslint errorring 导入没有扩展名的 jsx

    我正在尝试在 es6 中导入 jsx 文件而不需要 jsx 扩展名 import LoginErrorDialog from LoginErrorDialogView Not import LoginErrorDialog from Log
  • 如何在故事书中注入窗口变量?

    我想添加一个 React 组件 称为ApplicationForm to a 故事书 https github com storybooks storybook 故事书是这样写的 import configureStore from sto
  • 如何更改 Google Maps v3 API for Directions 中的开始和结束标记图像

    我使用 DirectionsRender 绘制了一条路线 但我不知道如何用我自己的标记替换通用的 Google 标记 我知道并在正常的谷歌地图情况下使用它 但发现很难用开始和结束的方向标记来做到这一点 如果这是一个愚蠢的问题 感谢您的任何建
  • 如何使用javascript将大图像转换为十六进制?

    如果我尝试将图像转换为十六进制 无论我使用哪个函数 我都会收到此错误消息 该图像的大小为 7 MB 19812 毫秒 清理 1401 2 1455 0 gt 1401 2 1455 0 MB 9 9 0 ms 自上次 GC 以来 8 3 m
  • 带有淘汰赛js的隐形recaptcha

    我正在完成隐形验证码 但我在实现它时遇到问题 谷歌开发人员页面中的代码显示它应该是这样的
  • 可以在初始 DOM 解析期间/之前修改 DOM 吗?

    是否可以在初始 DOM 解析期间或之前修改 DOM 或者我是否必须等到 DOM 被解析和构建之后才能与其交互 更具体地说 是否有可能阻止 DOM 中的脚本元素使用用户脚本 内容脚本或 Chrome 或 Firefox 中的类似脚本运行 在解
  • Bootstrap按钮加载+Ajax

    我正在使用 Twitter Bootstrap 的按钮加载状态 http twitter github com bootstrap javascript html buttons http twitter github com bootst
  • 将 GMT 时间转换为当地时间

    我以这种格式从我的服务器获取 GMT 时间 Fri 18 Oct 2013 11 38 23 GMT 我的要求是使用Javascript将此时间转换为本地时间 例如 如果用户来自印度 首先我需要采用时区 5 30并将其添加到我的服务器时间并
  • 设置 cookie 时中断 JavaScript 执行

    当设置 cookie 时 是否可以始终中断浏览器开发人员工具中的 javascript 执行 无需显式设置 JS 断点 document cookie 在 html head 块的开头添加此代码片段效果很好
  • 如何制作没有 ng-repeat 的模板并使用 Angular-drag-and-drop-lists 将数据传递到 $scope?

    我想用角度拖放列表 https github com marceljuenemann angular drag and drop lists使用我自己的网格模板到所见即所得编辑器 如何构建我自己的 HTML 模板而不需要ng repeat因
  • window.location 和 location.href 之间的区别

    我对之间的区别感到困惑window location and location href 两者似乎都以相同的方式行事 有什么不同 window location是一个对象 它保存有关当前文档位置的所有信息 主机 href 端口 协议等 lo
  • 为什么我们在打字稿中使用 HTMLInputElement ?

    我们为什么使用 document getElementById ipv as HTMLInputElement value 代替 document getElementById ipv value 功能getElementById返回具有类
  • Firebase 函数 onWrite 未被调用

    我正在尝试使用 Firebase 函数实现一个触发器 该触发器会复制数据库中的一些数据 我想观看所有添加的内容votes user vote 结构为 我尝试的代码是 const functions require firebase func
  • 日期出现奇怪的错误,“未捕获非法访问”

    所以我试图找到最新的DateJavascript 可以处理 我把它减少到 9 月 275760 并增加了我开始捕获未捕获的天数illegal access例外new Date 09 24 275760 to new Date 10 13 2
  • Vue 和 Vuex:处理依赖的计算属性

    我的应用程序是一个使用 Vuex 在 Vue 中构建的精简电子表格 关键组件是TableCollection Table and Row The TableCollection有一个包含多个的数组Table对象 每个Table有一个包含多个
  • 如何使用 crypto-js 解密 AES ECB

    我正在尝试将加密数据从 flash 客户端 发送到服务器端的 javascript 在 asp 中作为 jscript 运行 有几个 javascript Aes 库 但它们实际上没有文档记录 我正在尝试使用 crypto js 但无法让代
  • 在 Shopify 商店中嵌入 Vue 组件

    在产品页面中 我尝试显示自定义 Vue 组件 为简洁起见 该组件根据给定的产品 ID 显示 Firebase 数据库中的一些信息 我最初尝试将其制作为 Shopify 应用程序 以便我可以访问他们的 API 我实现了 OAuth 并且可以检
  • 使用 ApolloClient 从 useContext 挂钩导入一个简单变量

    我的反应相对较新 似乎无法导入client来自上下文的变量 我有一个名为 federation tsx 的文件 其中包含一些代码 我相信这应该是相关部分 const link createHttpLink uri process env U
  • 如何确定所有角度2分量都已渲染?

    当所有 Angular2 组件完成渲染时 是否会触发一个角度事件 For jQuery 我们可以用 function 然而 对于 Angular2 当domready事件被触发 html 只包含角度组件标签 每个组件完成渲染后 domrea
  • Vue.js[vuex] 如何从突变中调度?

    我有一个要应用于 json 对象的过滤器列表 我的突变看起来像这样 const mutations setStars state payload state stars payload this dispatch filter setRev

随机推荐

  • less.js 在 Chrome 中不起作用

    我注意到less js在 Firefox 中可以工作 但在 Chrome 中不行 还是因为我犯了一个错误 highlight cb1e16 shade1 cb1e16 tone1 5c6f7d grad1 e6edf3 grad2 8a8d
  • 如果变量等于值 php [重复]

    这个问题在这里已经有答案了 我试图在数据插入 MySQL 查询之前进行检查 这是代码 userid vbulletin gt userinfo userid sql3 mysql query SELECT FROM table WHERE
  • Flex/actionscript 中 F5 和浏览器关闭事件的区别

    我使用下面的代码来确定浏览器窗口的关闭 它工作得很好 但是 当用户使用 F5 或单击浏览器刷新按钮刷新页面时 就会出现问题 即使在这种情况下也会调用同一段代码 我想知道是否有什么办法可以使用动作脚本区分浏览器关闭事件和刷新事件 packag
  • WCF:Net.TCP多个绑定,相同端口,不同IP地址

    我遇到了问题 我是 WCF 的新手 因此我们将不胜感激 这是我的代码 public static void StartHosts try Create a new host ServiceHost host new ServiceHost
  • 对齐多个 ggplot 图表(带或不带图例)[重复]

    这个问题在这里已经有答案了 我正在尝试使用 ggplot 绘制一个图表来比较两个变量的绝对值 并显示它们之间的比率 由于比率是无单位的 而值不是无单位的 因此我无法在同一 y 轴上显示它们 因此我想将它们垂直堆叠为两个具有对齐 x 轴的独立
  • Redis - 如何配置自定义转换

    在 spring data redis 中 我们如何需要配置可以从 Spring boot 应用程序或配置自动连接 注入的自定义转换器 我读到 ReadingConverter and WritingConverter来自 Spring D
  • iPhone NSURL 获取最后重定向的 url

    我想知道如何将 NSURL 更新为您的 url 将重定向到的最后一个 url使用 NSURL 或 NSRequest 感谢你的帮助 谢谢 zanque 的解决方案有效 但为了避免下载 无用 数据 我将 http 方法更改为 HEAD NSM
  • 如何根据文件名部分过滤MsBuild中的ItemGroup?

    我有一个ItemGroup包含一些文件 我无法控制如何生成此列表
  • 如何在 Android 中渲染 PDF 文件

    Android 的库中不支持 PDF 有没有办法在Android应用程序中渲染PDF文件 从 API Level 21 Lollipop 开始 Android 提供了Pdf渲染器类 create a new renderer PdfRend
  • 使用控制台应用程序报告关闭时的内存泄漏

    我创建了一个控制台应用程序并设置 ReportMemoryLeaksOnShutdown True 我创建了一个 TStringList 但没有释放它 当程序完成执行时 我会短暂地看到内存泄漏 但随后控制台关闭 我尝试添加 ReadLn 到
  • 当前页面的 UIPageControl 点大小[重复]

    这个问题在这里已经有答案了 我试图找出如何使所选页面的点比其他页面稍大 如下所示 Page 1 Page 2 我可以更改点的颜色 大小all点 背景等 但不适用于specific当前页面的点 如何仅更改当前页面的点大小 这可以是 Swift
  • 删除整个 PHP 类

    class foo 假设该类存在于我的代码中 然后我不再需要该类并希望将其删除 以便稍后我可以用新类替换它 是否可以从运行时删除整个类 不可以 您不能在运行时删除或大幅修改 PHP 类 或函数
  • 处理错误后跳过承诺链

    使用https github com kriskowal q图书馆 我想知道是否可以做这样的事情 Module A function moduleA exportedFunction return promiseReturningServi
  • 从 ActiveDirectory 检索用户帐户到期时间

    我正在尝试从帐户中检索到期日期 我试过了 DirectoryEntry user new DirectoryEntry iMem var AccountExpiration DateTime FromFileTime int user Pr
  • 为什么 Task 比 ValueTask 更快?

    我正在做一个基准测试Task
  • 在 ActionBarSherlock 中将标题重力设置为中心

    您好 我想为我的主要活动应用自定义背景布局 我找不到解决办法 有人可以给我一些建议吗 希望在操作栏中有一个简单的带有背景的 TextView 这可能吗 我设法删除图标并设置背景图像 但是如何将文本的重力设置为居中并更改字体呢 getSupp
  • 如何获得连续的触摸事件?

    我的类扩展了 View 我需要在其上获取连续的触摸事件 如果我使用 public boolean onTouchEvent MotionEvent me if me getAction MotionEvent ACTION DOWN myA
  • 如何将 json 加载到我的 angular.js ng-model 中?

    我有一个我认为可能是一个非常明显的问题 但我无法在任何地方找到答案 我只是想将一些 JSON 数据从我的服务器加载到客户端 现在 我正在使用 JQuery 通过 AJAX 调用加载它 代码如下 它位于 html 文件中 到目前为止它有效 但
  • WPF 工具包数据网格单元格文本换行

    我的 WPF 数据网格的列是固定宽度的 这意味着行中的长文本被截断 我怎样才能让文字换行 如果您使用的是 DataGridTextColumn 则需要定义 DataGridTextColumn ElementStyle 的样式
  • Reactjs - 如何将值从子组件传递到祖父组件?

    下面是在reactjs中将值从子组件传递到父组件的正确示例 App jsx import React from react class App extends React Component constructor props super