如何在功能组件中更改父组件的子状态组件

2024-01-03

我创建了一个倒计时器组件 我在这个组件附近有一个按钮

我希望当用户单击此按钮时重置计时器

为此我应该改变子状态

我找到了从孩子那里改变父母状态的解决方案 但我找不到解决方案

可以用ref解决吗? (我的计时器组件是一个功能组件)


React ref 转发是解决方案: 这篇博客将描述更多:https://medium.com/javascript-in-plain-english/react-refs-both-class-and-function-components-76b7bce487b8 https://medium.com/javascript-in-plain-english/react-refs-both-class-and-functional-components-76b7bce487b8

import React, { useState } from "react";
import "./styles.css";

class ChildClass extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      timer: 100
    };
    this.resetTimer = this.resetTimer.bind(this);
  }
  resetTimer() {
    this.setState({
      timer: 0
    });
  }
  render() {
    let { timer } = this.state;
    return <span>{timer}</span>;
  }
}

const ChildFunction = React.forwardRef((props, ref) => {
  const [timer, setTimer] = useState(100);
  const resetTimer = () => {
    setTimer(0);
  };
  React.useImperativeHandle(ref, ()=>({
    resetTimer
  }));
  return <span>{timer}</span>;
});

export default function App() {
  let childClassRef = React.createRef(null);
  let childFuncRef = React.createRef(null);
  const resetClassTimer = () => {
    childClassRef.current.resetTimer();
  };
  const resetFuncTimer = () => {
    childFuncRef.current.resetTimer();
  };
  return (
    <div className="App">
      <ChildClass ref={childClassRef} />
      <button onClick={resetClassTimer}>Reset</button>
      <br/>
      <ChildFunction ref={childFuncRef} />
      <button onClick={resetFuncTimer}>Reset</button>
    </div>
  );
}

我添加了类组件和功能组件的引用转发。 React.js 和 React Native 都是一样的。

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

如何在功能组件中更改父组件的子状态组件 的相关文章

随机推荐

  • 如何从 React Redux 中的子组件进行分派?

    我的服务器有这样的代码
  • Android 多实例

    我在android中的通知中遇到问题 每当我单击通知时 我都必须再次调用相同的活动 但据我认为新的活动被调用 但前一个活动也在后端运行 因为我的代码一次又一次地运行 因为有多个实例 请帮助我如何在每次单击通知时解决或关闭多个实例 code
  • 当文档窗口在 Visual Studio 中获得焦点时发生的事件

    我在 Visual Studio 中有一个可扩展性项目 我需要使用当我在 Visual Studio 编辑器中从一个窗口更改为另一个窗口时触发的事件 我的问题是 我创建了一个显示一些图表的工具窗口 该图表依赖于一个可编辑文件 当我保存可编辑
  • Nestjs同时设置http和https服务器

    我正在尝试设置 http 和 https 服务器 咨询了官方文件 https docs nestjs com faq multiple servers nest i System Information OS Version Windows
  • 可从同一类的另一个实例访问私有字段[重复]

    这个问题在这里已经有答案了 我没有得到以下信息 我一直认为我只能从声明该字段的类访问私有字段 但是在这种情况下我可以访问它 class Session List
  • 子类化用户控制的 GridView

    我正在尝试对位于 UserControl 中的 GridView 进行子类化 因此 我希望能够在单独的页面中处理事件 基本上我的代码如下 我的带有 GridView 的 UserControl div div
  • 二分查找,从 java 到 Actionscript

    我正在尝试将以下 java 二进制搜索例程转换为 as3 我假设 compareTo 是内置的java方法 而 gt gt gt 是一种按位运算 任何熟悉 ActionScript 3 和 Java 的人都可以帮忙解决这个问题吗 packa
  • Excel 单元格值被 OLEDB 提供程序截断

    我正在使用 OleDbConnection 类从 Excel 2000 2003 工作簿检索数据 string connectionString Provider Microsoft Jet OLEDB 4 0 Data Source fi
  • 为什么垂直滚动条会自动移动?

    例如 我不明白为什么当单击 Line 9 时垂直滚动条会自动移动到最顶部位置 进一步单击不会移动滚动条 谁能解释为什么以及如何解决这个问题 我使用 Firefox 3 6 3 HTML div div
  • Fortran 中对多个矩阵进行加权和求和的最有效方法

    我正在尝试用 Fortran 编写一个函数 将多个具有不同权重的矩阵相乘 然后将它们加在一起形成一个矩阵 我已经确定这个过程是我的程序的瓶颈 这个权重将被many程序单次运行的时间 具有不同的权重 现在我正试图通过从 Matlab 切换到
  • 找不到项目文件

    我有一个现有的 TFS 项目 其结构与此类似 我在框架目录中创建了一个包含 2 个项目的解决方案 然后 我将 Cerberus 和 Cerberus Mvc 作为现有项目添加到 OnFaitQuoi 解决方案中 请注意 之前已签入 cerb
  • SSH.NET 从 ShellStream 检索输出

    我是 SSH NET 的新手 我正在我目前正在进行的一个项目中使用它 我必须使用 SSH NET 运行 sudo 命令 这就是我使用 ShellStream 运行该命令并为 sudo 命令提供身份验证的原因 现在我尝试运行 sudo 命令
  • 链接到完整的 div - html 和 css

    一些文字 sliderPart width 25 height 100 sliderPart a display block position relative text decoration none height 100 font 1
  • 如何将 BIT2 类型链接到变量?

    In most input cardsBeckhoff 有两个变量 Limit 1 and limit 2 他们有个BIT2datatype 大小为0 2字节 即有两位 如下图所示Limit 1 Bit0 Value smaller equ
  • 如何使用 python 在 Tensorboard 上显示模型的权重和偏差

    我创建了以下模型进行训练 并希望在 Tensorboard 上将其可视化 Basic Cell LSTM tensorflow index in epoch 0 perm array np arange x train shape 0 np
  • 正则表达式在页面上查找两个单词

    我试图找到包含单词 text1 和 text2 的所有页面 我的正则表达式 text1 n text2 it doesn t work 如果您的 IDE 支持s 单线 标志 所以 字符可以匹配换行符 您可以使用以下方式搜索您的项目 text
  • 在VBA中逐像素扫描图像

    这里有一个近乎精确的问题读取图像的像素颜色 https stackoverflow com questions 16528319 read pixel colors of an image 实际上 Op 提出的问题与我所问的问题相同 但接受
  • Android - 用于语音识别的外部 MIC

    我需要知道将麦克风或耳机连接到设备时会触发哪个事件 并且我正在使用语音识别 并且观察到它不会遵循与设备未连接任何设备时相同的流程 我想知道是否有某种解决方案 因为我目前正在创建的应用程序是在智能手机中进行测试的 但将来需要连接麦克风或耳机
  • 使用 Moment,js 获取本月所有星期一日期

    有没有办法使用 moment js 库获取当月的所有星期一日期 我知道我可以通过以下方式得到月底 moment endOf month 但如何获取当前 任何月份的所有星期一日期 我不想要 javascript 默认日期库中的某些函数 请参考
  • 如何在功能组件中更改父组件的子状态组件

    我创建了一个倒计时器组件 我在这个组件附近有一个按钮 我希望当用户单击此按钮时重置计时器 为此我应该改变子状态 我找到了从孩子那里改变父母状态的解决方案 但我找不到解决方案 可以用ref解决吗 我的计时器组件是一个功能组件 React re