从父组件更改反应钩子状态

2024-01-10

我有一个像这样的钩子组件:

import React, { useState} from "react";

const MyComponent = props => {
  const [value, setValue] = useState(0);
  const cleanValue = () => {
    setValue(0);
  };

  return (<span><button onClick={()=>setValue(1)}/>{value}<span>)
}

我想重置父组件的值。如何从父组件调用干净的值?父组件是有状态组件。


如果父组件必须控制子组件状态,那么该状态可能必须驻留在父组件本身中。但是,您仍然可以使用 ref 从父级更新子级状态并在子级中公开重置方法。您可以利用useImperativeHandle挂钩以允许子级仅向父级公开特定属性

const { useState, forwardRef, useRef, useImperativeHandle} = React;


const Parent = () => {
  const ref = useRef(null);
  return (
     <div>
      <MyComponent ref={ref} />
      <button onClick={() => {ref.current.cleanValue()}} type="button">Reset</button>
     </div>
  )
}

const MyComponent = forwardRef((props, ref) => {
  const [value, setValue] = useState(0);
  
   const cleanValue = () => {
    setValue(0);
  };

  useImperativeHandle(ref, () => {
     return {
      cleanValue: cleanValue
     }
  });

  return (<span><button type="button" onClick={()=>setValue(1)}>Increment</button>{value}</span>)
});
ReactDOM.render(<Parent />, document.getElementById('app'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.3/umd/react-dom.production.min.js"></script>
<div id="app"/>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从父组件更改反应钩子状态 的相关文章

随机推荐

  • 将应用程序安装在 C:\Users\[用户名]\AppData\Local 文件夹中的 VS2010 设置的 DefaultLocation 属性应该是什么?

    我必须使用 Visual Studio 安装 Windows 服务 安装的目标位置由 Visual Studio 安装项目中的 DefaultLocation 属性处理 我使用 AppDataFolder 标签来安装该应用程序 结果 它已安
  • 有没有办法通过 GitHub 操作推送更改?

    这个问题指的是 https github com features actions https github com features actions 我已经编写了一个 GitHub 操作来构建我的代码并创建生产包 我想通过提交对 orig
  • AVPlayer 未在后台加载媒体

    在后台运行时 我的 AVPlayer 实现无法播放下载的音频 例如播客 但能够播放本地存储的歌曲 仅当手机与电脑断开连接时 后台播放才会失败 如果我的手机直接连接到我的计算机 调试器 则本地或下载的任何媒体都可以正常播放 在前台 播放任一媒
  • 如何使用 Amazon API gateway 将 json 数据放入 Kinesis 流

    我使用 amazon api gateway 设置一个 API 并希望将数据放入 Kinesis 流中 Amazon API gateway 对其有内置支持 但是当我尝试放入 JSON 数据时 它给出了 序列化异常 var data ua
  • 动态加载exe文件

    我正在尝试从我的程序动态加载 exe 文件 并从该动态加载的 exe 运行 SomeProcedure 这是我在加载的 exe library exe 中所做的事情 interface procedure SomeProcedure std
  • 带省略号的函数原型[重复]

    这个问题在这里已经有答案了 我想知道下面的函数原型是否有效 它编译得很好 但是这三个时期有点让我失望 我在谷歌上找不到类似的东西 void foo int Thanks 是的 这是有效的 在这个例子中 使用创建一个可变参数函数va list
  • 使用 VPAID JavaScript API 的广告示例 [已关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在努力寻找 HTML5 VAST VPAID 广告的示例 IAB 的VPAID规格 http ww
  • 如何调用在文本变量中具有名称的类构造函数? [Python]

    假设我们在全局命名空间中定义了一些可用的类 在示例中 class Point def init self x y self x x self y y class Vector def init self alpha r self x r c
  • 有没有办法确保线程分配给指定的对象集?

    我们正在开发一个应用程序 其中一组对象可能会受到来自 3 个不同源的消息的影响 每条消息 来自任何源 都有一个对象作为其目标 每个消息接收器将在其自己的线程上运行 我们希望消息的处理 接收后 尽可能高速 因此针对目标对象的消息处理将由线程池
  • 有人在生产中使用过 Jaxer 吗?

    有谁用过吗Jaxer http web archive org web 20090803092709 http www aptana com 80 Jaxer在生产环境中 我很好奇它与 php ruby 等相比如何表现 以及是否有人知道使用
  • 如何在交易视图的 PINE 图中使用不同的字符串文字?

    我的情节定义如下 plotshape xvalue location location absolute style shape labeldown color red size size tiny text Upper 这里的问题是部分文
  • 如何在 Intellij Idea 10 中运行 Scala 代码

    我有一个简单的问题 我安装了idea和scala插件 创建项目并添加想要运行的简单println Hello world 我创建 scala 脚本 添加这一行 当我运行它时 出现错误expected class or object defi
  • 创建配置文件(config.php)php的最佳方法[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在为我的项目创建一个数据库配置文件 但我不确定我的 config php 是否安全 我如何修改此脚本以实现安全连接 配置文件 索引 php
  • iOS TableView 重新加载并滚动到顶部

    第二天我无法解决表的问题 我们有一个segmentedControl 当它改变时 它也会改变表 假设控件的段中有 3 个元素 相应地有 3 个数组 这一点很重要 它们的大小不同 当segmentedControl 更改时 我需要向上滚动表格
  • 根据语言选择对齐文本视图(左-右)

    我有一个线性布局 其中包含水平排列的文本视图和编辑文本 我有一个选项可以在先前的活动中选择语言 英语和阿拉伯语 当我选择英语时 当前对齐方式很好 但是当我选择阿拉伯语时 它应该从右到左显示 这意味着 textView 位置应该向右 在布局中
  • 验证来自客户的应用内购买收据

    我阅读了 几乎 所有有关验证应用内购买的答案 实际上我已经以服务器端的方式实现了它 但管理服务器有时可能会太昂贵 理论上你可以从你的应用程序进行验证 基本上只是向 Apple 发送一个 json 并获取答案 当然 我知道在越狱设备上收据可能
  • 如何将 SQL 与 Node.JS 结合使用

    所以 我对整个后端世界相当陌生 我现在正在使用 Node js 进行编码 我有一个项目 我必须存储具有几个字段的用户 但我不知道如何用节点连接数据库并进行查询 而且 我有 WAMP 堆栈 因为我曾经编写 PHP 代码 很少 我也可以将其 M
  • 如何在 swift 中从外部框架呈现视图控制器?

    我制作了一个带有名为 AuthenticationViewController h 的视图控制器和笔尖 AuthenticationViewController xib 的框架 用于测试的示例项目用于展示 AuthenticationVie
  • shared_ptr 释放[重复]

    这个问题在这里已经有答案了 可能的重复 如何从 boost shared ptr 释放指针 https stackoverflow com questions 1525764 how to release pointer from boos
  • 从父组件更改反应钩子状态

    我有一个像这样的钩子组件 import React useState from react const MyComponent props gt const value setValue useState 0 const cleanValu