我的编程空间,编程开发者的网络收藏夹
学习永远不晚

React 保留和重置State

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

React 保留和重置State

前言

在开发时,我们复用一个组件,比如说切换不同的聊天窗口,这个窗口是公用的组件<Chat/>聊天窗口、<ContactList/>组件,控制不同人的id去切换不同的窗口和一个父组件<Messenger/>

<Chat/>包含的state值:text

import { useState } from 'react';
export default function Chat({ contact }) {
  const [text, setText] = useState('');
  return (
    <section className="chat">
      <textarea
        value={text}
        placeholder={'Chat to ' + contact.name}
        onChange={e => setText(e.target.value)}
      />
      <br />
      <button>Send to {contact.email}</button>
    </section>
  );
}

<ContactList/>触发setTo改变To的值。

export default function ContactList({
  selectedContact,
  contacts,
  onSelect
}) {
  return (
    <section className="contact-list">
      <ul>
        {contacts.map(contact =>
          <li key={contact.id}>
            <button onClick={() => {
             // 调用setTo改变To的值
              onSelect(contact);
            }}>
              {contact.name}
            </button>
          </li>
        )}
      </ul>
    </section>
  );
}

<Messenger/>管理state值:To

当我们在侧边栏切换不同的tab的时候,里面输入的内容没有重置。

因为组件的JSX位置不变,且state是独立的,每次传递新的props值to,即使会重新渲染,但并不会改变子组件已有的state值。

之前我的解决方法:

有没有更好的解决方法?答案是有的,这就涉及到了子组件state的重置与保留。

一、state保留

当在父组件中引入一个子组件,就会在对应的UI tree上分配到一个位置,如果这个UI tree的位置一直没有被修改,那么它的state值也就不会发生改变。

这种说白了,只是props值改变,子组件state依旧保留。因为组件并没有从触发 (存在-->消失-->出现) 的情况。

二、state重置

如果要让上面的组件里state重置,就需要在其中一个组件套着任意标签,组件将会出 (存在-->消失-->出现) 的情况。

单击复选框时,计数器状态将重置。虽然呈现了Counter,但该div的第一个子元素从div变为section。section从DOM中移除时,它下面的整个树(包括Counter和它的状态)也会被销毁。

添加key值是最佳重置子组件state的解决方案。

优化前

优化后

总结

  • 只要相同的组件呈现在相同的UI tree位置,React 就会保留state
  • state不保存在JSX标记中。它与放置JSX的树位置相关联。
  • 您可以通过给子树一个不同的key来强制它重置状态。

以上就是React 保留和重置State的详细内容,更多关于React 保留重置State的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

React 保留和重置State

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何配置Netdata的存储和保留周期

要配置Netdata的存储和保留周期,您可以按照以下步骤进行操作:打开Netdata的配置文件(通常位于/etc/netdata/netdata.conf)。在配置文件中找到[backend]部分,并确保以下选项已设置为所需的值:[bac
如何配置Netdata的存储和保留周期
2024-04-25

如何设置持久化存储和数据保留策略在Prometheus系统中

在Prometheus系统中,可以通过配置相关的持久化存储和数据保留策略来确保数据不会丢失。以下是一些常见的设置方法:启用持久化存储:在Prometheus的配置文件中,可以通过配置storage.local.path参数来指定本地持久化存
如何设置持久化存储和数据保留策略在Prometheus系统中
2024-03-05

Mac系统重装指南(不抹盘):2023版保姆级教程,轻松解决macOS问题并保留数据和软件

🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全
2023-08-16

编程热搜

目录